2013-11-04 77 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

相關問題