1

私のモデルには、タグの配列であるタグフィールドがあります。私が抱えている問題は、タグをキーワードのように機能させたいということですが、ESは、ファセットの目的でタグをスペースに分割しています。

マッピングは次のとおりです。

indexes :tags, type: :array

人気のあるタグのクエリは次のとおりです。

tire.search do
  facet 'tags' do
    terms :tags, size: 100
  end
end

結果は個々の単語になります。たとえば、["retro music"、 "awesome"]のタグが付けられたレコードには、3つの別々のタグが付けられます。同様に、「retro music」(must { term 'tags', options[:tag] })を検索するクエリを実行すると失敗しますが、「retro」または「music」のクエリは成功します。ここでの望ましい動作は、タグがアトミックである必要があるため、「レトロミュージック」(または「素晴らしい」)タグ検索のみが成功することです。

4

2 に答える 2

7

デフォルトでは、elasticsearch は「標準」アナライザーを使用して文字列を分析します。このアナライザーは、文字列を小文字に変換し、それらを単語に分割し、頻繁に発生する単語 (ストップワード) をいくつか削除します。フィールド タグのアナライザーをオフにすることで、elasticsearch がそのすべてを実行するのを防ぐことができます。

indexes :tags, :type => 'string', :index => :not_analyzed 
于 2012-08-11T23:52:51.403 に答える
1

私にとっての解決策は:index => :not_analyzed上記のようで、ここに示すように、Page.import ではなく Page.create_elasticsearch_index でインデックスを作成しましたhttps://stackoverflow.com/a/14693422/524458

于 2013-07-19T12:25:22.457 に答える