Solr距离过滤

时间:2012-06-03 00:58:32

标签: solr filter geospatial

我正在尝试使用Solr进行距离范围搜索。

我知道在5公里范围内搜索过滤非常容易 &q=*:*&fq={!geofilt pt=45.15,-93.85 sfield=store d=5}

我所追求的是如果我在寻找 5到10 km 的范围内,该如何做同样的事情?

由于

1 个答案:

答案 0 :(得分:9)

以下几种方法可以解决这个问题。很明显,查询会进入过滤查询(" fq" param),因为目的不是修改分数。并且假设这些参数在请求URL中设置(尽管它们不必放在那里):

pt=45.15,-93.85&sfield=store

这是一种方法:

_query_:"{!geofilt d=10}" -_query_:"{!geofilt d=5}"

我使用_query_ Solr语法hack输入子查询,该查询提供了将查询解析器从Lucene切换到geo的机会。

这是另一种可能最快的方法:

{!frange l=5 u=10}geodist()

这是一个函数查询,返回距离,然后将距离限制在所需的范围内。它可能更快,因为它将评估每个文档一次,而不是像之前的意愿一样。

您可能希望将其标记为not cacheable并添加一个bbox过滤器,以便检查每个文档的次数要少得多。 以下是最终结果(不是网址转义):

pt=45.15,-93.85&sfield=store&fq={!frange l=5 u=10 cache=false cost=100}geodist()&fq={!bbox d=10}