ruby on rails:ElasticSearch / Tire动态搜索多个索引

时间:2013-05-09 17:15:50

标签: ruby-on-rails ruby-on-rails-3 elasticsearch tire

我已经做了很多搜索而且我无法得到这个问题的答案 - 希望这不是重复(如果是的话道歉)......

前言:我正在使用Rails&轮胎执行ElasticSearch。

我有一个对象,Place,属性为“name”,“city”,“state”和“zip”。它们的索引如下:

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”in使用芝加哥的地理中心或伊利诺伊州的地理中心,城市,州/邮政文本框和搜索仍然有效。

有什么明显的我做错了吗?

1 个答案:

答案 0 :(得分:0)

  

然而,条件3没有 - 似乎只关注“名称”字段

Errr,不是

string "name:#{name}*"

告诉它这样做?

或者你的意思是做什么

string "#{name}"