1

再会。我使用轮胎在我的 Rails 应用程序中有弹性搜索。我的数据库中有很多名字。我想像search_query:“alex ivan”一样搜索它们,输出应该是[“Alexander Ivanov”,“Alex Ivanenko]等(来自db的真实姓名)我试图用这篇文章做到这一点,但它没有搜索. 所以我做了一个快速破解:

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

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

4

1 回答 1

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
于 2013-11-04T16:42:46.693 回答