弹性搜索,轮胎和自动完成

时间:2013-11-04 15:54:56

标签: ruby-on-rails ruby elasticsearch tire

美好的一天。我在使用轮胎的rails应用程序中有弹性搜索。 我的数据库中有很多名字。我想搜索它们像search_query:“alex ivan”,输出应该是[“Alexander Ivanov”,“Alex Ivanenko”等。(来自db的真实姓名) 我尝试用this article制作,但它没有搜索。所以我快速做了一件事:

params[:search_query] = params[:search_query].split(" ").map{|a|a<<("*")}.join(" ") 

这是一个好的决定还是我可以用分析仪等来做?

1 个答案:

答案 0 :(得分:1)

这是我在使用ElasticSearch时使用分析器搜索企业名称所做的事情。将它放在你的映射块中并适当地修改索引 - 我想这会给你你想要的东西:

indexes :name, :type => 'multi_field', :fields => {
  :name => { :type => 'string', :analyzer => 'standard' },
  :"name.exact" => { :type => 'string', :index => :not_analyzed }
}

然后在searchquery块内,例如:

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