Solr距离过滤

use*_*027 2 solr filter geospatial

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

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

我所追求的是如果我在5到10公里的范围内寻找怎么做同样的事情?

谢谢

Dav*_*ley 9

以下是几种方法.很明显,查询进入过滤器查询("fq"param),因为意图不是修改分数.并且假设这些参数在请求URL中设置(尽管它们不必放在那里):

pt=45.15,-93.85&sfield=store
Run Code Online (Sandbox Code Playgroud)

这是一种方法:

_query_:"{!geofilt d=10}" -_query_:"{!geofilt d=5}"
Run Code Online (Sandbox Code Playgroud)

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

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

{!frange l=5 u=10}geodist()
Run Code Online (Sandbox Code Playgroud)

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

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

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