我正在尝试使用 Solr 进行距离范围搜索。
我知道在 5 公里范围内搜索过滤非常容易
&q=*:*&fq={!geofilt pt=45.15,-93.85 sfield=store d=5}
如果我在5 到 10 公里的范围内寻找,我所追求的是如何做同样的事情?
谢谢
我正在尝试使用 Solr 进行距离范围搜索。
我知道在 5 公里范围内搜索过滤非常容易
&q=*:*&fq={!geofilt pt=45.15,-93.85 sfield=store d=5}
如果我在5 到 10 公里的范围内寻找,我所追求的是如何做同样的事情?
谢谢
这里有几种方法可以解决这个问题。很明显,查询进入过滤查询(“fq”参数),因为目的不是修改分数。并假设这些参数是在请求 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()
这是一个函数查询,返回然后限制在所需范围内的距离。它可能更快,因为它将对每个文档进行一次评估,而不是像以前那样评估两次。
您可能希望将其标记为不可缓存并添加一个 bbox 过滤器,以便检查每个文档的次数要少得多。 这是最终结果(不是 url 转义):
pt=45.15,-93.85&sfield=store&fq={!frange l=5 u=10 cache=false cost=100}geodist()&fq={!bbox d=10}