2

次のフィールドを持つ Resource オブジェクトがあります: titledescription、およびbody

Tire gem を使用するtitledescriptionには標準のアナライザーを使用したいのですが、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という単語を検索するようにします。

これは可能ですか?そして、私はこの検索ゲーム全体に慣れていないので、これは良い考えですか? それとも、私は火の穴の上でガソリンの缶をジャグリングしているだけですか?

4

1 に答える 1

6

クエリでフィールドを指定していない場合、_allフィールドが検索されます。_all フィールドにはすべてのフィールドのコピーが含まれており、デフォルトのアナライザーを使用しています。タイヤで弾性検索のデフォルト アナライザーを設定するにはどうすればよいですか? で説明されているように、デフォルトのアナライザーをスノーボールに変更することができます。また、_all フィールドに含めるフィールドを制御することもできます。

于 2012-05-30T12:16:12.113 に答える