2

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

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

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

谢谢

4

1 回答 1

9

这里有几种方法可以解决这个问题。很明显,查询进入过滤查询(“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}
于 2012-06-03T07:13:10.223 回答