次のフィールドを持つ Resource オブジェクトがあります: title、description、およびbody。
Tire gem を使用するtitleとdescriptionには標準のアナライザーを使用したいのですが、bodyフィールドには snowball アナライザーを使用したいと考えています。
したがって、resource.rbファイルには次のコードがあります。
mapping do
indexes :title, type: 'string', :index => :not_analyzed, :store => true
indexes :description, type: 'string'
indexes :body, type: 'string', :analyzer => 'snowball'
end
def self.search(params)
search_query = params[:query]
tire.search(page: params[:page], per_page: 15) do |s|
s.query { string params[:query], default_operator: "AND"} if params[:query].present?
# do i need another line here specifically for description?
#s.query { string "body:#{params[:query]}", analyzer: 'snowball'} if params[:query].present?
end
end
マッピングでアナライザーをスノーボールに設定しました。次のコマンドを実行すると、これが機能することを確認します。
curl -XGET localhost:9200/example/_search?q=body:cook
調理、調理済みなどを返します。
ただし、次のクエリを渡すことができるようにしたい
curl -XGET localhost:9200/example/_search?q=cooking
そして、elasticsearchで、タイトルフィールドと説明フィールドで cook という単語を検索し、本文でcookという単語を検索するようにします。
これは可能ですか?そして、私はこの検索ゲーム全体に慣れていないので、これは良い考えですか? それとも、私は火の穴の上でガソリンの缶をジャグリングしているだけですか?