2011-07-19 29 views
0

我正在開發一個獅身人面像(PHP)啓用自動填充字段,查詢用戶。我遇到了一些奇怪的情況,應該返回匹配的某些輸入不會。獅身人面像+ PHP,問題與意外的查詢結果

在我的用戶索引的字段:

'fullname', 
'username', 
'address', 
'phone', 
'email' 

一些一般性的配置信息:

charset_type = utf-8 
enable_star = 1 
min_infix_len = 3 
ignore_chars = U+20 

我當前的查詢設置如下:

$search = preg_replace('/([^\s]{3,})/', '*$1*', preg_replace('/[^a-z ]/i', '', $search)); 
$sphinx->SetMatchMode(SPH_MATCH_EXTENDED2); 
$sphinx->SetSortMode(SPH_SORT_RELEVANCE); 
$matches = $sphinx->Query($search . ' @email company.com', 'users'); 

問題來使用以下搜索參數:

John -> returns list of all Johns (GOOD!) 
John S -> returns nothing (BAD!) 
John St -> returns all John St*'s (GOOD!) 

同理:

Ben -> returns all Ben's (GOOD!) 
Ben M -> returns nothing (BAD!) 
Ben Ma -> returns nothing (BAD!) 
Ben Mar -> returns user with Ben Mar*'s (GOOD!) 

原本我以爲這個問題是因爲名字和姓氏爲索引的不同領域,但現在,我已經合併他們到FullName域,我仍然得到確切相同的結果。

當前(通過上述preg_replace)我打包每個輸入*的單詞。我也試過用*包裝整個字符串,

$search = '*' . $search . '*'; 

但是結果不準確。我試過除了extended2之外的其他搜索模式,但沒有運氣。 (它變得更糟)我添加了一個選項來忽略配置中的空格,希望它能更好地選擇「John S」之類的東西,但仍然沒有運氣。

大多數情況下,我只想讓人們能夠通過輸入名字+最後的首字母找到用戶。這是人們嘗試查找用戶名的常見方式,目前他們不能。

任何幫助非常感謝。謝謝!

編輯:

在一番搜索,我發現這一點:http://sphinxsearch.com/forum/view.html?id=5757

似乎有可能是一些錯誤/不一致與空間搜索。但如果有人有任何想法,請評論。謝謝!

回答

0

打開部分索引。

看看周圍: min_infix_len min_prefix_len

+0

我已經使用「min_infix_len = 3」尋找像「約翰·斯特恩斯」時是如何「約翰街」和「約翰」的工作。但是「John S」不起作用... – Johnzo

+0

將它設置爲min_infix_len = 1 – Jauzsika