【问题标题】:Ideal way of sorting results by distance in Solr 4?Solr 4中按距离排序结果的理想方法?
【发布时间】:2013-04-04 22:50:42
【问题描述】:

我正在努力阅读和理解这篇关于 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" />

ll 是一个位置字段,定义为:

<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>

我在上面引用的文档中看到的示例提到了相交的圆圈和各种似乎没有必要的事情,如果我感兴趣的只是在我的查询中提供一个起点(纬度/经度),并获取按距离排序的结果列表。

更新:已接受的答案提供了适用于 Solr 3 和 4 的良好解决方案。David Smiley 的 comment on that answer 为感兴趣的人提供了严格的“Solr 4”排序方式。

【问题讨论】:

    标签: solr geolocation solr4


    【解决方案1】:

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

    假设您站在北极 (0.0, 0.0),并且您希望对公司进行排序,使离您最近的公司在结果列表中排在第一位。您的查询将如下所示:

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

    【讨论】:

    • 谢谢@PaigeCook。我的印象是,如果做事,我的“ll”字段更像是 Solr3 方式,而我的“geo”字段是 Solr4 做事方式。我们还应该在 Solr4 中使用 geodist 吗?文档在谈论新旧空间特征时会感到困惑。
    • 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 表示整个世界。
    • 谢谢@DavidSmiley。我将在原始问题中引用您的评论以突出显示此信息。
    猜你喜欢
    • 1970-01-01
    • 2016-12-15
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    相关资源
    最近更新 更多