0

Sphinx 検索は初めてです。マニュアルと、Geodist を機能させる方法に関するいくつかのハウツーを読みましたが、結果が得られません。私は解決策を求めてインターネットと StackOverflow を精査し、読んだすべてのことを試しましたが、まだ Sphinx から結果を返すことができません。これが私が持っているものです。どんな助けでも大歓迎です。

テーブル:

緯度と経度を含むロケーション テーブルは、Google のジオコード API によって入力されます。

CREATE TABLE IF NOT EXISTS `locations` (
    `sid` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(75) NOT NULL,
    `latitude` float(10,6) DEFAULT NULL,
    `longitude` float(10,6) DEFAULT NULL,
     PRIMARY KEY (`sid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=26 ;

クエリ「SELECT sid, latitude, longitudeFROM locations」は以下を返します。

(1, 29.8986, -95.4831),
(3, 30, -95.25),
(4, 47.7313, -122.177),
(5, 33.8811, -98.4325),
(6, 52.12, -0.474118),
(7, 30.0134, -95.4576),
(8, 29.8702, -95.5705),
(9, 39.8691, 116.461),
(10, 29.8159, -95.9282),
(11, 42.9572, -83.8272),
(12, 29.7887, -95.6587),
(13, 29.7036, -95.5511),
(14, 33.5873, -102.378),
(15, 29.6157, -98.4823),
(16, 43.649, -79.3838),
(17, 35.0512, -97.937),
(18, 31.8823, -102.317),
(19, 29.9379, -95.4114),
(20, 29.884, -95.5827),
(21, 40.7971, -79.744),
(22, 30.0218, -95.4069),
(23, 32.4501, -97.2549),
(24, 42.7305, -94.6788),
(25, 30.239, -96.4416);

Sphinx.conf

source Location
{
type = mysql
sql_host = localhost
sql_user = sphinx
sql_pass = password
sql_db = database
sql_port = 3306
sql_query_pre = set names utf8
sql_query_pre = set session query_cache_type=OFF

sql_query = select sid, radians(longitude) as longitude, radians(latitude) as latitude,
name from locations

sql_attr_float = longitude
sql_attr_float = latitude
sql_attr_uint = sid
  #my unique id is sid rather than id

sql_ranged_throttle = 0

sql_query_info = select * from locations where sid = $id
}

{
source = Location
path = /var/lib/sphinxsearch/data/Location
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
charset_type = utf-8
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
ignore_chars = U+00AD
html_strip = 0
enable_star = 0
}

私のPHPコード:

$Sphinx = new SphinxClient();
$Sphinx->setServer(SPINX_SERVER, SPINX_PORT);
$Sphinx->SetConnectTimeout(1);
$Sphinx->SetArrayResult(true);
$Sphinx->SetMatchMode(SPH_MATCH_ALL);
$Sphinx->SetLimits(0,100);

//The lat and lng input is typically provided by google geocode api but I wrote these in       static to keep things simple.
$lat = (float) 29.7601927;
$lng = (float) -95.3693896;
$radius = 10000;

$Sphinx->SetGeoAnchor('latitude', 'longitude', deg2rad(floatval($lat)),
deg2rad(floatval($lng)));
$Sphinx->SetSortMode(SPH_SORT_EXTENDED, '@geodist ASC');


$Sphinx->SetFilterFloatRange('@geodist', 0.0, floatval($radius));


$result = $Sphinx->Query('', 'Location');

結果:

Array(
                'error' => '',
                'warning' => '',
                'status' => (int) 0,
                'fields' => array(),
                'attrs' => array(
                                'longitude' => (int) 5,
                                'latitude' => (int) 5,
                                '@geodist' => (int) 5
                ),
                'total' => '0',
                'total_found' => '0',
                'time' => '0.000'
)
4

2 に答える 2

1

これはここで回答されています: http://sphinxsearch.com/forum/view.html?id=11038

基本的に、Sphinx インデックスが機能するには、少なくとも 1 つのフルテキスト フィールドが必要です。属性だけで構成されたインデックスは使用できません。

Sphinx の最新バージョンでは、インデックス作成時にエラーが発生しますが、以前のバージョンでは、機能しないインデックスが黙って作成されていました。

于 2013-05-07T22:04:18.247 に答える