我正在開發一個獅身人面像(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
似乎有可能是一些錯誤/不一致與空間搜索。但如果有人有任何想法,請評論。謝謝!
我已經使用「min_infix_len = 3」尋找像「約翰·斯特恩斯」時是如何「約翰街」和「約翰」的工作。但是「John S」不起作用... – Johnzo
將它設置爲min_infix_len = 1 – Jauzsika