Solr 3.4 に問題があり、Geodist や Geofilt などの空間検索機能を使用しています。すべてが問題ないようで、結果は、指定された中心点からの距離でおそらくソートされて返されます。
ただし、Solr 3.4 には関数の結果をデータで返す機能がないため、手動で (この場合は PHP で) 計算する必要がありました。
私はドキュメントを読みました.geodistは、2つの緯度/経度ポイント間の地理距離のhaversine関数を実装する関数である必要があります. 関数を PHP に移植し (簡単に!)、正しい結果が得られることを確認しました。
問題は次のとおりです。Solrは、見つけられなかった別の式で距離を計算します。したがって、PHP で距離を再計算すると、データの距離に一貫性がなくなります (たとえば、83Mile ではなく 132Mile)。これは許容できる違いではありません。
私の解決策: データへのポートで間違いを犯したかどうかを確認するために関数比較を作成すると便利だと言いました。Solrコードを掘り下げて、hasine のリテラル実装を抽出しましたorg.apache.solr.search.function.distance.HaversineConstFunction
。このテスト スクリプト (完全なソース コードとデータ) を作成しました。
Solr (または Lucene) は、ジオディストの実装として haversine を使用しないという私の結論。しかし、どの方程式かわかりません。
UPDATEバグが解決されました。テストをやりすぎたと思います。間違ったパラメーターの命名が原因で、誤った結果が発生しました。Solr Web サービスからの結果の順序を変更するために、(Solr 規則) の代わりに (SQL からのもの) を使用していましたorder
。sort