0

我在使用 Solr 3.4 时遇到问题,我正在使用它的空间搜索功能,例如 Geodist 和 Geofilt。一切似乎都很好,结果返回应该是按给定中心点的距离排序的。

然而,由于 Solr 3.4 缺乏返回函数结果的能力,因此我不得不手动计算它(在这种情况下通过 PHP)。

我阅读了文档,geodist 应该是一个实现2 lat/lng 点之间地理距离的半正弦函数的函数。我将该函数移植到 PHP(很简单!),并确保它给出正确的结果。

问题是:Solr 用我找不到的不同公式计算距离。因此,当我在 PHP 中重新计算距离时,它会导致数据距离不一致(例如 132 英里而不是 83 英里),这不是我可以容忍的差异。

我的解决方案:我说好的,创建一个函数比较很方便,看看我是否在我的数据端口中犯了错误,我挖掘了Solr 代码并提取了 hassine in 的文字实现,org.apache.solr.search.function.distance.HaversineConstFunction结果几乎相同。并制作了这个测试脚本(完整的源代码和数据)

我的结论是 Solr(或 Lucene)不使用 hasrsine 作为 geodist 实现。但我不知道是哪个方程。

更新错误已解决。我认为我的测试走得太远了。错误的结果是由于错误的参数命名而发生的,我使用(order来自 SQL 的那个)而不是sort(Solr 约定)来更改来自 Solr Web 服务的结果的顺序。

4

1 回答 1

1

查看更新,bug已解决。感谢@jarnbjo 和@TreyA 提醒我一个愚蠢的问题。在将来调试库代码之前,我应该查看代码中的愚蠢错误。

于 2011-12-06T11:14:04.680 回答