目标是按分数然后距离执行多重分类,并限制半径为0.14度我执行以下查询:
localhost:8983/solr/coll1/select?sortsq={! score=distance}locations:"Intersects(Circle(34.0031792,-118.3082034 d=0.14))"&fl=score,distdeg:query($sortsq),*&facet=true&sort=score desc,query($sortsq) asc&indent=on&wt=xml&version=2.2&rows=10&start=0&q=text:*&facet.field=xxxxx&fq=fieldname:"filterValue"
返回与查询匹配的所有文档,无论它是否在圆圈内,但是在0.14度内的文档返回距离(distdeg),而其他文档没有返回该字段。
如何省略不相交的文件?
位置字段声明:
<fieldType name="geo_field" class="solr.SpatialRecursivePrefixTreeFieldType"
spatialContextFactory="com.spatial4j.core.context.jts.JtsSpatialContextFactory"
distErrPct="0.025"
maxDistErr="0.000009"
units="degrees"
/>
更新 查询的工作版本
http://localhost:8983/solr/coll1/select?getDist={! score=distance}locations:"Intersects(Circle(34.0031792,-118.3082034 d=0.14))"&fl=score,distdeg:query($getDist),*&facet=true&sort=score desc&indent=on&wt=xml&version=2.2&rows=10&start=0&q=*:*&boost=query({! score=distdeg filter=false v=$getDist)&fq=locations:"Intersects(Circle(34.0031792,-118.3082034 d=0.14))",states:"CA"
答案 0 :(得分:4)
你根本就没有进行空间过滤。 solr搜索匹配基于'q'(来自用户的查询字符串;它得分)和'fq'(过滤查询,没有得分)的文档,没有别的。您的'q'和'fq'都不是指您放入sortsq参数的空间过滤器。请参阅文档:http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4#Search
你的q =文字:*很奇怪;你有什么打算?所有文档?该查询似乎可行,但不会这样做,因为它没有做你认为它做的事情;它发现所有在该领域具有任何价值的文档(计算速度不快),这不是所有文档都必需的。最佳做法是defType = edismax和q.alt = *:*和qf = text(假设这是您的文本搜索字段),如果您没有要提供的查询字符串,它将匹配所有文档。
顺便说一句,跟任何其他分数进行分数排序没有任何意义。存在各种各样的浮点值,因此很少会查询距离。您可能希望通过距离来提高分数。下面是一个示例:&amp; boost = query({!score = recipDistance filter = false v = $ spatialfilter})(替换具有spatialFilter空间搜索的参数名称)。