2011-07-19 77 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