美好的一天。我在使用轮胎的rails应用程序中有弹性搜索。 我的数据库中有很多名字。我想搜索它们像search_query:“alex ivan”,输出应该是[“Alexander Ivanov”,“Alex Ivanenko”等。(来自db的真实姓名) 我尝试用this article制作,但它没有搜索。所以我快速做了一件事:
params[:search_query] = params[:search_query].split(" ").map{|a|a<<("*")}.join(" ")
这是一个好的决定还是我可以用分析仪等来做?
答案 0 :(得分:1)
这是我在使用ElasticSearch时使用分析器搜索企业名称所做的事情。将它放在你的映射块中并适当地修改索引 - 我想这会给你你想要的东西:
indexes :name, :type => 'multi_field', :fields => {
:name => { :type => 'string', :analyzer => 'standard' },
:"name.exact" => { :type => 'string', :index => :not_analyzed }
}
然后在search
和query
块内,例如:
search do
query do
# either a must match for exact match
boolean(:minimum_number_should_match => 1) do
must { string "name:#{<variable>}" }
end
# or a broader match
string "name:#{<variable>}*"
end
end