太阳黑子Solr搜索 - 如何过滤多个'with'

时间:2013-06-03 17:28:04

标签: ruby-on-rails solr sunspot

我有以下SOLR搜索,我试图在我的数据库中找到基于lat / lng使用Geohashes的几个地方,并确保这些地方通过Affiliates表有一个联盟链接。

search = Sunspot.search(opts[:types]) do
  any_of do
    0.upto(opts[:range]) do
      geohash = GeoHash.encode(place.lat, place.lng, precision)
      neighbors = GeoHash.neighbors(geohash) rescue []
      geohashes = [geohash] + neighbors
      with(:affiliate_names, ['company_a', 'company_b']) 
      with(:"geohash_#{precision}", geohashes)
      precision -= 1
    end
  end
  without(:class, IgnoreClass) unless opts[:types].include?(VacationRental)
end
search.hits

我遇到的问题是,此搜索会在geohash中的两个位置以及affiliate_names'company_a'和'company_b'中的位置。具体来说,这两行:

      with(:affiliate_names, ['company_a', 'company_b'])
      with(:"geohash_#{precision}", geohashes)

我想通过geohash和affiliate_name过滤地点。现在,带有语句的两个语句就像一个OR。

如何进行Solr太阳黑子搜索以提取符合条件的记录?

1 个答案:

答案 0 :(得分:1)

我明白了。

您可以按如下方式嵌套代码

all_of
  with(:affiliate_names, ['company_a', 'company_b'])
  with(:"geohash_#{precision}", geohashes)
end

这将确保您查询的solr记录符合要求。