我正在开发一个启用sphinx(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!)
最初我认为问题是因为firstname和lastname在索引的不同字段中,但现在我已将它们合并到fullname字段中,我仍然得到完全相同的结果。
目前(通过上面的preg_replace)我正在包装在*中输入的每个单词。我也尝试用*,
包装整个字符串$search = '*' . $search . '*';
但结果不太准确。我尝试了除了extended2之外的其他搜索模式,没有运气。 (它变得更糟)我添加了一个选项来忽略配置中的空格,希望它能更好地选择像“John S”这样的东西,但仍然没有运气。
大多数情况下,我希望人们能够通过输入名字+最后一个首字母来找到用户。这是人们尝试查找用户名的常见方式,目前他们不能。
非常感谢任何帮助。谢谢!
编辑:
在很多搜索中我找到了这个:http://sphinxsearch.com/forum/view.html?id=5757
在使用空格搜索时似乎存在一些错误/不一致。但如果有人有任何想法请评论。谢谢!
答案 0 :(得分:0)
启用部分索引。
环顾四周: min_infix_len min_prefix_len