2013-05-09 76 views
0

我做了一堆搜索,我一直無法得到這個問題的答案 - 希望這不是一個重複(道歉,如果它是)...ruby​​ on rails:ElasticSearch /輪胎動態搜索多個指標

前言:我正在使用Rails & Tire來執行ElasticSearch。

我有一個對象,地點,屬性「名稱」,「城市」,「國家」和「郵編」。他們被編入索引如下:

indexes :name, :type => 'multi_field', :fields => { 
    :name => { :type => 'string', :analyzer => 'snowball' }, 
    :"name.exact" => { :type => 'string', :index => :not_analyzed } 
} 
indexes :city 
indexes :state 
indexes :zip 

有三個條件查詢:只有1名,2(市,州,郵政編碼),3名AND(市,州,郵政編碼)。

我對「查詢」模塊的代碼是:預期對多個測試

if (City, State).present? 
    boolean do 
     must { string "name:#{name}*" } if name.present? 
     must { string "city:#{city_state}*" } 
     must { string "state:#{city_state}*" } 
    end 
    elsif (Zip).present? 
    boolean do 
     must { string "name:#{name}*" } if name.present? 
     must { string "zip:#{query_parameters["zip"]}*" } 
    end 
    else 
    string "name:#{name}*" } 
    end 

上述搜索條件#1和#2的工作。然而,條件3沒有 - 它似乎只關注「名稱」字段。我假設它與使用「city_state」變量在「城市」和「州」上搜索有關......但我這樣做是因爲用戶可以輸入「芝加哥」或「伊利諾伊州」 City,State/Zip文本框和搜索應該仍然可以使用,分別使用芝加哥的地理中心或伊利諾伊州的地理中心。

任何明顯的我做錯了?

回答

0

然而,條件3沒有 - 它似乎只注意 「名稱」 字段

Errr,是不是

string "name:#{name}*" 

告訴它做的正是那?

還是你的意思只是做

string "#{name}" 
+0

澄清:這三個條件是:有三個條件查詢:只有1名,2(市,州,郵政編碼),3名和(城市,州或郵編)。所以,Name &&(City,State || Zip)不起作用。 – CDub 2013-05-20 23:16:06