Ignore accents using elastic search and tire
我正在继承一个通过轮胎进行弹性搜索的项目。
搜索正在运行,但通过它关闭了重音。例如,搜索 "this" 需要返回 "th?-s" 和 "thi??"。
我已阅读此轮胎文档: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吗,如果是,我如何在这里声明它?
1 2 3 4 5 6 7 8 9 | 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" 放入某些索引,但这似乎不起作用(也不会产生任何错误输出):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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 |
这篇文章中有一个非常好的"asciifolding"示例(在索引文本时从标记中删除重音符号):Autocomplete with Tire