java - Solr 3.4 Geodist 函数,不正确/或不需要的结果

标签 java php geospatial latitude-longitude haversine

我在使用 Solr 3.4 时遇到问题,我正在使用它的空间搜索功能,例如 Geodist 和 Geofilt。 一切看起来都不错,并且返回的结果据称是按距给定中心点的距离排序的。

但是,由于 Solr 3.4 缺乏在数据中返回函数结果的能力,我必须手动计算它(在本例中是通过 PHP)。

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

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

我的解决方案:我说好吧,创建一个函数比较很方便,看看我在数据移植中是否犯了错误,我深入研究了 Solr code并在 org.apache.solr.search.function.distance.HaversineConstFunction 中提取了 hassine 的字面实现,结果几乎相同。并做了这个testing script (full source code and data) .

我的结论是 Solr(或 Lucene)不使用半正矢作为测地实现。但我不知道哪个方程。

更新该错误已解决。我认为我的测试做得太过分了。由于参数命名错误,出现不正确结果,我使用order(来自SQL的)而不是sort(Solr约定)来更改Solr Web 服务结果的顺序。

最佳答案

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

关于java - Solr 3.4 Geodist 函数,不正确/或不需要的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8384415/

相关文章:

php - ORM-ManyToMany 关系中的附加字段

php - 如何使用 WooCommerce 更改每行的产品类别数

r - 在 sf 包中查找多边形点

java - Maven 全新安装 : Failed to execute goal org. apache.maven.plugins :maven-resources-plugin:3. 2.0:resources

java - 如何使 JTable 列不包含 JTextFields,而是包含 JTextAreas?

java - 二维矩阵的数据结构设计

sqlite - sqlite R*TREE 自底向上解析

java - 如何使用 WebScript 上传文件的新版本?

php - 上传图像(JPEG)时有没有办法检查 DPI?

r - 如何在R中的传单 map 上绘制多个等时线