我遇到了Solr 3.4的問題,我正在使用它的空間搜索功能,如 Geodist和Geofilt。 一切看起來都很好,結果是按照給定中心點的距離來回歸。Solr 3.4 Geodist功能,不正確或不需要的結果
但是由於Solr 3.4缺乏返回數據中函數結果的能力,我不得不手動計算它(在這種情況下是由PHP計算)。
我讀了文檔,geodist應該是一個函數,它實現了2 lat/lng點之間的地理距離的haversine函數。我將函數移植到PHP(easy!),並確保它給出正確的結果。
問題是:Solr計算我找不到的公式中的距離。所以當我用PHP重新計算距離時,它會導致數據距離不一致(例如132Mile而不是83Mile),這並不是我能容忍的差異。
我的解決方案:我說好了它的方便,以創建一個功能比較,看看我在港的數據搞錯了,我挖成Solr code和org.apache.solr.search.function.distance.HaversineConstFunction
提取字面實施havesine的,結果幾乎完全相同。並做了這個testing script (full source code and data)。
我的結論是,Solr(或Lucene)沒有使用haversine作爲geodist實現。但我不知道哪個方程。
UPDATE該錯誤已得到解決。我想我的測試結果太過分了。 錯誤的結果是由於錯誤的參數命名而發生的,我使用order
(來自SQL的一個)而不是sort
(Solr約定)來更改Solr Web服務結果的順序。
你確定你不是簡單地得到正確的數字和使用錯誤的單位嗎? 83英里至少大約132公里。 – jarnbjo
爲了繼續jarnbjo,我在Haversine中看到的最常見的錯誤是1)忘記將緯度/經度從度數轉換爲弧度,2)沒有意識到地球半徑的單位將是輸出距離單位。你在Haversine公式中使用了什麼半徑的地球? – TreyA
@jarnbjo:我在所有的點上都考慮過單位,但我猜想有一個我錯過了的,就是Solr的webservice單元! –