在Solr 4中按距离分类结果的理想方法?

Mas*_*iti 3 solr geolocation solr4

我正在努力阅读和理解Solr 4中有关空间搜索的文档:

http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4

但是我很难找到一个简单的答案:在Solr 4中按距离对结果进行排序的理想方法是什么?

我的文档集中有两个可用的位置字段:

geo是一个location_rpt定义为的字段:

<fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
    geo="true" distErrPct="0.025" maxDistErr="0.000009" units="degrees" />
Run Code Online (Sandbox Code Playgroud)

并且ll位置字段定义为:

<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
Run Code Online (Sandbox Code Playgroud)

我在上面引用的文档中看到的示例引用了交叉圈和各种事情似乎没有必要,如果我有兴趣做的是在我的查询中提供一个起点(lat/lng),并得到一个按距离排序的结果列表.

更新:接受的答案提供了一个在Solr 3和4中有效的解决方案.David Smiley 对该答案评论为那些感兴趣的人提供了严格的"Solr 4"排序方式.

Pai*_*ook 5

根据第4章 - 查询Solr - 按照Apache Solr 4 Cookbook某点的距离对结果进行排序,以便按照ll您在模式中定义的字段的距离进行排序 ,您将使用geodist()函数,如下所示:

假设您站在北极(0.0,0.0),并且您希望让公司按照这样的方式进行排序,使得靠近您的公司在结果列表中排在第一位.您的查询将如下所示:

  http://localhost:8983/solr/select?q=company&sort=geodist(ll,0.0,0.0)+asc
Run Code Online (Sandbox Code Playgroud)

  • Solr 3空间字段比Solr 4空间字段更好地支持距离排序,因此Paige在这里针对典型需求提供了正确的答案.但是如果每个文档有一个可变数量的点,你*需要*Solr 4,因为Solr 3无法处理.纯粹排序(无过滤)的Solr 4方式是&sort = query($ sortsq)asc&sortsq = {!score = distance filter = false} geo:"Intersects(Circle(54.729696,-98.525391 d = 180))"注意filter = false local-param,d = 180表示整个世界. (3认同)