2011-12-05 6 views
0

Solr 3.4に問題があります。 Geodist、Geofiltなどの空間検索機能を使用しています。 すべては問題ないと思われ、その結果は所与の中心点からの距離によってソートされていると思われます。Solr 3.4 Geodist関数、間違った/望ましくない結果

しかし、Solr 3.4は関数結果をデータに戻すことができないため、手動で(この場合はPHPによって)計算する必要がありました。

私はドキュメントを読んで、ジオディストは2緯度/経度点の間の地理的距離のhaversine関数を実装する関数でなければなりません。私はPHP(easy!)に関数を移植し、正しい結果が得られることを確認しました。

問題はです:私は見つけることができなかった異なる公式で距離を計算します。したがって、PHPで距離を再計算すると、データの距離に一貫性がなくなります(たとえば、83マイルの代わりに132マイル)。それは私が許容できる違いではありません。

マイソリューション:私はOK、それは私がSolr codeに掘ってorg.apache.solr.search.function.distance.HaversineConstFunctionにhavesineのリテラル実装を抽出し、その結果、私はデータへの私のポートでミスを犯したかどうかを確認するための機能比較を作成するには便利だと述べてほぼ同じだった。これをtesting script (full source code and data)としました。

私の結論Solr(またはLucene)は、geodistの実装としてhaversineを使用していません。しかし、私はどの方程式を知りません。

更新日バグが解決されました。私はテストであまりにも遠すぎたと思う。 正しくない結果が発生しました。パラメータ名が間違っていたため、sort(Solr規則)の代わりにorder(SQLからのもの)を使用して、Solr Webサービスの結果の順序を変更しました。

+0

正しい番号を取得しているだけでなく、間違ったユニットを使用していることは確実ですか? 83マイルは少なくとも約132kmです。 – jarnbjo

+0

jarnbjoを続けるには、私がHaversineに見られる最も一般的な間違いは1)緯度/経度を度からラジアンに変換することを忘れている、2)地球の半径の単位を実現していないことが出力距離単位になります。 Haversineの公式で使用した地球の半径は何ですか? – TreyA

+0

@jarnbjo:私はすべての点で考慮されたユニットを取ったが、私が見逃したものがあると思います。これはSolr Webserviceユニットです! –

答えて

1

アップデートを参照してください。バグが解決されました。 @ jarnbjoと@TreyAのおかげで、私は愚かな問題を思い出させてくれました。私は将来、ライブラリコードをデバッグする前に、自分のコードで愚かな間違いを見つけなければなりません。

関連する問題