最近我的 Sphinx geodist 搜索遇到了一些问题,我不知道问题可能是什么。
狮身人面像配置:
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。我想补充一点,这确实在某些时候有效(老实说!),所以这可能是维护/可扩展性的问题。
我知道这种类型的问题很难调试,所以我不再寻找可靠的答案,而不仅仅是暗示可能不合适的地方。
谢谢