我遇到了Solr 3.4的问题,我正在使用它的空间搜索功能 Geodist和Geofilt。 一切似乎都没问题,结果是返回,据说按距离从给定的中心点排序。
然而,由于Solr 3.4缺乏在数据中返回函数结果的能力,我必须手动计算它(在本例中是PHP)。
我阅读了文档,geodist应该是一个实现2个lat / lng点之间地理距离haversine函数的函数。我将该函数移植到PHP(简单!),并确保它给出了正确的结果。
问题是:Solr计算我找不到的不同公式中的距离。因此,当我在PHP中重新计算距离时,会导致数据距离不一致(例如132Mile而不是83Mile),这并不是我能容忍的差异。
我的解决方案:我说好了,创建一个函数比较很方便,看看我的端口是否出错了数据,我挖到了Solr code并提取了文字实现在org.apache.solr.search.function.distance.HaversineConstFunction
中的强碱,结果几乎相同。并且做了这个testing script (full source code and data)。
我的结论是Solr(或Lucene)不使用hasrsine作为地理实践。但我不知道哪个等式。
更新错误已解决。我想我的测试太过分了。由于参数命名错误而导致不正确的结果,我使用order
(来自SQL的那个)而不是sort
(Solr约定)来更改结果的顺序Solr网络服务。
答案 0 :(得分:1)
看到更新,bug已经解决了。感谢@jarnbjo和@TreyA提醒我一个愚蠢的问题。在将来调试库代码之前,我应该查看代码中的愚蠢错误。