0

私はたくさんの検索をしましたが、この質問に対する答えを得ることができませんでした - これが繰り返されていないことを願っています (もしそうなら申し訳ありません)...

序文: Rails & Tire を使用して ElasticSearch を実行しています。

属性「name」、「city」、「state」、および「zip」を持つオブジェクト Place があります。それらは次のように索引付けされます。

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

検索条件は次の 3 つです。1. 名前のみ、2.​​ (都市、州または郵便番号)、3. 名前と (都市、州または郵便番号)。

「クエリ」ブロックの私のコードは次のとおりです。

  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」の両方を検索することと関係があると思います...しかし、ユーザーは「シカゴ」または「イリノイ」のいずれかを入力できるため、これを行っていますCity, State / Zip テキスト ボックスと検索は、シカゴの地理的中心またはイリノイの地理的中心をそれぞれ使用して引き続き機能するはずです。

私が間違っていることは明らかですか?

4

1 に答える 1