2015-12-22 58 views
0

我有一個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,在我的設置中是否有錯誤,並且我索引我的數據是錯誤的?

回答

1

第一列始終用作文檔ID,因此如果將其刪除,則別名將用作文檔ID。使其不能用於該屬性。

無論如何,您不需要重複唯一的ID作爲屬性。只要直接使用「ID」,它幾乎可以在任何地方使用attribe select id from...

至於匹配。獅身人面像旨在匹配整個單詞。

如果想要部分詞匹配,請看min_prefix_len或中綴。

建議堅持使用enable_star = 1,如果不想包含星星請參閱expand_keywords。

+0

是的,這是問題,謝謝,我認爲獅身人面像會自動進行MySQL''LIKE'搜索,但我需要設置min_prefix_len,並使用'*'。謝謝 –