我已经做了很多搜索,但我无法得到这个问题的答案 - 希望这不是重复(如果是的话,请道歉)......
前言:我正在使用 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. 姓名与(城市、州或邮政编码)。
我的“查询”块代码是:
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”有关......但我这样做是因为用户可以输入“Chicago”或“Illinois” City, State / Zip 文本框和搜索应该仍然有效,分别使用芝加哥的地理中心或伊利诺伊州的地理中心。
有什么明显的我做错了吗?