2013-11-04 80 views
1

美好的一天。我在使用轮胎的导轨应用程序中进行了弹性搜索。 我在我的分贝许多名字。我要寻找他们喜欢SEARCH_QUERY:“亚历克斯伊万”,并输出应为[“亚历山大·伊万诺夫”,“亚历克斯Ivanenko]等(从DB真实姓名) 我试图与this article让它但它不是搜索所以我做了一个quickhack:Elasticsearch,轮胎和自动完成

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

它是一个很好的决定或我可以用分析仪等做

回答

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 
+0

它就像我的变种,但你只能做一个排序的条件exect马赫? – AKovtunov

+0

对不起,我不明白你的评论。 – CDub

+0

“名称:#{} *” == .MAP从我的代码{|一<<( “*”)| A}。所以你正在使用相同的逻辑? – AKovtunov

相关问题