我有一個MySQL表,名爲Locations
其中包含來自世界各地的位置。斯芬克斯只返回精確匹配
我已經設置了Sphinx索引在這個表上,寫了下面的事情我sphinx.conf
文件:
source src_geonames
{
type = mysql
sql_host = localhost
sql_user = myuser_myuser
sql_pass = mypass_mypass
sql_db = mydb_mydb
sql_port = port
sql_query_pre = SET NAMES utf8
sql_query_pre = SET session wait_timeout=7200
sql_query_pre = SET session net_read_timeout=7200
sql_query_pre = SET session net_write_timeout=7200
sql_query = SELECT Locations.LocationId, Locations.LocationId AS geonameid_attr, Locations.Name AS name, Locations.AsciiName AS asciiname, Locations.AlternateNames AS alternatenames, Locations.countries_CountryId AS country FROM Locations WHERE Locations.FCode IN ('PPL', 'PPLA', 'PPLA2', 'PPLA3', 'PPLA4', 'PPLC', 'PPLCH', 'PPLF', 'PPLG', 'PPLH', 'PPLL', 'PPLQ', 'PPLR', 'PPLS', 'PPLW', 'PPLX', 'STLMT') OR Locations.FCode LIKE 'ADM%'
sql_attr_uint = geonameid_attr
sql_field_string = country
}
index geonames
{
source = src_geonames
path = /server06-disk4/sphinx_data/geonames
charset_table = 0..9, A..Z->a..z, _, a..z, U+C0..U+DF->U+E0..U+FF, U+E0..U+FF
mlock = 1
}
解釋到sql_query:列Locations.Name
包含地點的確切名稱(即:巴黎,羅馬,紐約)Locations.AlternateNames
列包含該位置的所有替代名稱(即:用不同語言的位置名稱,例如,用於布加勒斯特,替代名稱可以包含布加勒斯特)
奇怪的是,如果我從
sql_query
中刪除第一個Locations.LocationId
,當我嘗試運行索引器時,它帶着一個錯誤問候我,發現geonameid_attr無法找到,並且它被忽略。這是爲什麼發生?
要測試一切正常,我從命令行連接到SphinxSQL,並試圖運行一些查詢,方式如下:
SELECT geonameid_attr FROM geonames WHERE match('@(name,alternatenames) "[query-string-here]"') LIMIT 0,10 option max_matches=200000
我是從什麼除外上面的查詢,是,它會同時搜索alternatenames
列,name
列,並返回的一切,正是[查詢字符串,這裏],或者在它[查詢字符串,這裏]。
但是,如果我運行上面的查詢,搜索,例如:巴黎,它會返回一些行(正確行,因爲我已經與MySQL檢查),但如果我搜索帕裏,它沒有返回值在所有。
爲字符串帕裏顯然是字符串的一部分巴黎,我想除了獅身人面像搜索返回至少相同的結果,它的回報,如果我在尋找巴黎。
我在哪裏做錯了什麼?我在查詢的方式有問題
Sphinx
,在我的設置中是否有錯誤,並且我索引我的數據是錯誤的?
是的,這是問題,謝謝,我認爲獅身人面像會自動進行MySQL''LIKE'搜索,但我需要設置min_prefix_len,並使用'*'。謝謝 –