Solr 4空间查询过滤器仍然返回超出范围的文档

时间:2013-01-21 16:44:44

标签: solr geospatial spatial spatial-query solr4

目标是按分数然后距离执行多重分类,并限制半径为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"

1 个答案:

答案 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空间搜索的参数名称)。