我最近在搜索我的Sphinx geodist时遇到了一些问题,但我对这个问题可能会感到很遗憾。
Sphinx conf:
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的一些问题。我想补充一点,这确实在某些方面有效(诚实!),所以这可能是维护/可扩展性的问题。
我理解这类问题很难调试,所以我不再只是在暗示可能不合适的地方找到一个可靠的答案。
由于