スフィンクスは - とき「は」と「インデックス」フィールドに使用します
-
21-09-2019 - |
質問
私はレール2.3.2で私のルビーに何日か前にスフィンクスや思考-スフィンクスを設置し、基本的な検索が素晴らしい作品。これは、任意の条件なしで、意味します。今、私はいくつかの条件で検索をフィルタリングする。
私はアナウンスモデルを持っており、次のようにインデックスが見えます:
define_index do
indexes title, :as => :title, :sortable => true
indexes description, :as => :description, :sortable => true
end
たぶん私は間違っているんだけど、私は、私はこれらの属性に:sortable => true
構文を追加したときにのみ、私は私の検索での条件としてそれらを使用できることに気づきました。それ以外の場合は、何かを見つけることができません。
さて、私も2デシベルのテーブルを生成しacts_as_taggable_onプラグインを、使用しています。私はちょうど私のアナウンスモデルでacts_as_taggable_on :tags, :categories
ている、タグのためのモデルを持っていません。
私が今したいことは、タグでフィルタリングすることです。だから、私は運と私のインデックスhas tags(:id), :as => :tag_ids
に追加しようとした、ともindexes tags(:id), :as => :tag_ids
が、それはどちらか動作しませんでした。
はどのようにインデックスを構築することができます:
Announcement.search 'some word', :conditions => {:tag_ids => some_id}
また、has
及びindexes
おかげで、 ブライアン
解決
私は逆にご質問にお答えしましょう。 indexes whatever
が、これはスフィンクスはあなたが提供するテキストを検索するものです、文字列を期待しています。
一方、has whatever
は検索フィールドにこのコンテンツを追加しません。あなたはスフィンクスがすでに検索を行っている後にソートやフィルタリングのためにこのようなものを使用するので、それは主に数字を期待しています。
最後に、私はあなたの代わりにhas tags(:id), :as => :tag_ids
を使用しての検索であなたのモデルで:with => {:tag_ids => some_id}
、および:conditions
をしたいと考えています。条件は、代わりにすべてのフィールドの特定のフィールドにテキスト検索を実行するための方法として、あなたがインデックスされているテキストフィールドで使用されています。あなたはhas whatever
で指定した属性を使用して結果をフィルタリングするために使用されます。