use*_*027 2 solr filter geospatial
我正在尝试使用Solr进行距离范围搜索.
我知道在5公里范围内搜索过滤非常容易
&q=*:*&fq={!geofilt pt=45.15,-93.85 sfield=store d=5}
我所追求的是如果我在5到10公里的范围内寻找怎么做同样的事情?
谢谢
以下是几种方法.很明显,查询进入过滤器查询("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)