2

最近我的 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。我想补充一点,这确实在某些时候有效(老实说!),所以这可能是维护/可扩展性的问题。

我知道这种类型的问题很难调试,所以我不再寻找可靠的答案,而不仅仅是暗示可能不合适的地方。

谢谢

4

0 回答 0