5

私は、タイヤを介して弾性検索を行うプロジェクトを継承しています。

検索は機能していますが、アクセントがオフになっています。たとえば、「これ」を検索すると、「これ」と「これ」が返される必要があります。

このタイヤのドキュメントを読みました: http://karmi.github.com/tire/

同様に:http://railscasts.com/episodes/306-elasticsearch-part-1?view=asciicast

これは、弾性検索のオプションのほとんどがタイヤで利用可能であることを述べています。

アクセントを無視して検索すると、 asciifolding が出てきましたが、エラスティック検索には次のように書かれています。

http://www.elasticsearch.org/guide/reference/index-modules/analysis/asciifolding-tokenfilter.html

さらに、フィルター/アクセント/その他について、次のようないくつかのことを見つけました。

https://github.com/elasticsearch/elasticsearch/issues/890
https://gist.github.com/2142635

しかし、それらはすべて単純なエラスティック検索オプションを使用しています。

Ruby コードで asciifolding フィルターを使用しようとすると、「asciifolding」にフィルターが定義されていないというエラーが表示されます。

これが私のコードで行われている検索の根性です - これを変更してアクセントを区別しない検索を行うにはどうすればよいですか。それはasciifoldingですか?もしそうなら、どうすればここで宣言できますか?

result = tire.search(:load => true,page: params[:page], per_page: params[:per_page] ) do
  query { string "#{params[:term]}", :default_operator => 'and' }  if params[:term].present?
  filter  :missing,   :field => 'original_media_id' #see above
  #asciifolding?
  sort { by :updated_at, :desc } if params[:term].present?
  facet 'files' do
    terms  'indexed_files.file.id'  
  end
end

編集:または、おそらくマッピング/インデックス作成で行う必要がありますか? そして、インデクサーを再実行します。マッピングは次のとおりです。いくつかのインデックスに :filter => "asciifolding" を入れてみましたが、うまくいかなかったようです (エラー出力も生成されませんでした):

tire.mapping do
    indexes :id, :index => :not_analyzed
    indexes :name, :filter => "asciifolding"
    indexes :description, :filter => "asciifolding"
    indexes :created_at, :type => 'date'
    indexes :updated_at, :type => 'date'
    indexes :file_type
    indexes :indexed_files, :type => 'object' do
        indexes :file, :type => 'object', 
            :properties => { 
            :title => {
            :type => "multi_field",
              :fields => {
                :raw => { :type => 'string', :index => 'not_analyzed'},
                :title => { :type => 'string', :filter => "asciifolding" }
              }
            },
            :description => { :type => "string", :filter => "asciifolding" }
           }
    end
end
4

1 に答える 1

3

この記事には、「asciifolding」(テキストのインデックス作成時にトークンからアクセントを削除する) の非常に優れた例があります: Autocomplete with Tire

于 2012-07-29T20:07:14.780 に答える