最近、Sphinx ジオディスト検索でいくつかの問題が発生しており、何が問題なのかわかりません。
スフィンクスの設定:
index vacancy
{
source = vacancies
path = C:\workspace\tmp\sphinx\data\vacancies
docinfo = extern
charset_type = utf-8
}
source vacancies : base
{
sql_query = \
SELECT radians(Latitude) as latitude, radians(Longitude) as longitude \
FROM vacancies as v
sql_attr_float = latitude
sql_attr_float = longitude
}
わかりやすくするために、インデックス クエリから無関係な情報をいくつか切り取っています。
私が実行しているPHPは次のとおりです。
public function geospatial($lat, $long, $distance, $unit = 'miles')
{
switch(strtolower($unit)) {
case 'km':
case 'kilometers':
$multiplier = 1000;
break;
case 'm':
case 'miles':
default:
$multiplier = 1609.3440;
break;
}
$radius = (float) ($distance * $multiplier);
$this->Client->SetMatchMode(SPH_MATCH_ALL);
$this->Client->SetGeoAnchor('latitude', 'longitude', (float) deg2rad($lat), (float) deg2rad($long));
$this->Client->SetFilterFloatRange('@geodist', 0.0, $radius);
$this->Client->SetSortMode(SPH_SORT_EXTENDED, "@geodist ASC");
return $this->Client->query('', 'vacancy');
}
私は奇妙な結果を得ています。たとえば、距離 (マイル) を 50 に設定すると、400 マイル以上離れた結果が表示されます。したがって、クエリは何かを行いますが、何をすべきかではありません。
次のような複数の「チュートリアル」をざっと見ました。
http://www.sanisoft.com/blog/2011/05/02/geo-distance-search-in-sphinx/
http://www.fliquidstudios.com/2011/06/17/an-introduction-to-distance-based-searching-in-sphinx/
と
http://www.god-object.com/2009/10/20/geospatial-search-using-sphinx-search-and-php/
そして、何も場違いに見えません。
私のデータセットは緯度/経度の点に関して正しいことを知っているので、それは私の設定に問題があるか、PHP が間違っていると思います。これはある時点で実際に機能していたことを付け加えたいと思います (正直なところ!)。したがって、メンテナンス/拡張性の問題である可能性があります。
この種の質問はデバッグするのが面倒であることを理解しています。そのため、適切でない可能性があることについての単なるヒント以上の確かな答えを探しているわけではありません。
ありがとう