我正在尝试使用 Solr 进行距离范围搜索。
我知道在5公里范围内进行搜索过滤很容易&q=*:*&fq={!geofilt pt=45.15,-93.85 sfield=store d=5}
我所追求的是如果我正在寻找一系列的说法,如何做同样的事情5至10公里 ??
Thanks
这里有几种方法可以解决这个问题。很明显,查询进入过滤器查询(“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()
这是一个返回距离的函数查询,然后将其限制在所需的范围内。它可能会更快,因为它会评估每个文档一次,而不是像以前那样评估两次。
您可能想将其标记为不可缓存 http://www.lucidimagination.com/blog/2012/02/10/advanced-filter-caching-in-solr/并添加一个 bbox 过滤器,以便检查的文档数量大大减少。这是最终结果(不是转义的网址):
pt=45.15,-93.85&sfield=store&fq={!frange l=5 u=10 cache=false cost=100}geodist()&fq={!bbox d=10}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)