高度なUltrasphinx:タグとフィルター

RailsとRailsの優れた検索エンジンsphinxの統合についてすでに書いたhabr

Rails + Sphinx =? パートI

RailsとSphinx。

この記事では、 Ultrasphinxプラグインの追加機能についてお話します。









ステップ#1:タグで検索する





UltrasphinxHelpersモジュールから次のコードを取り出して、「lib / ultrasphinx_helpers.rb」に配置します。

モデルでは次のように記述します。

Copy Source | Copy HTML is_indexed :fields => [ 'title' ,"body"], : include => UltrasphinxHelpers::include_tags_configuration(self)



  1. Copy Source | Copy HTML is_indexed :fields => [ 'title' ,"body"], : include => UltrasphinxHelpers::include_tags_configuration(self)







次の例を考えてみましょう。



Copy Source | Copy HTML



  1. クラスの記事
  2. belongs_to: ユーザー
  3. is_indexed:fields => ["name"、 "body"、 "user_id"] ,: include => UltrasphinxHelpers :: include_tags_configuration(self)
  4. 終わり
  5. Ultrasphinx :: 検索 new (:query => "ruby")#フィールド「name」または「body」に単語「ruby」、またはタグ「ruby」を含むすべてのレコードが検索されます




1つのフィールドのみで検索する場合:

Copy Source | Copy HTML



  1. Ultrasphinx :: 検索 new (:query => "tag:ruby")#rubyタグでタグ付けされたオブジェクトのみを返します
  2. Ultrasphinx :: 検索 new (:query => "name:* sphinx")#名前でのみ検索します。名前にsphinxという接尾辞を持つ単語を含むすべてのものが存在します




ステップ#2:特定のエントリ間でのみ検索する





そして最後に、友人の記事の中だけを検索したい場合:

Copy Source | Copy HTML



  1. friends_ids = current_user.friends.map(&:id)#[1、2、5、6、9、12]
  2. Ultrasphinx ::検索。 new (:query => "* sphinx" 、:filters => {:user_id => friends_ids})




_________

テキストはHabraで準備されます






All Articles