【问题标题】:Sphinx + php, issue with unexpected query resultsSphinx + php,出现意外查询结果的问题
【发布时间】:2011-07-19 14:43:07
【问题描述】:

我正在开发一个启用 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!)

最初我认为问题是因为名字和姓氏在索引的不同字段中,但现在我将它们合并到全名字段中,我仍然得到完全相同的结果。

目前(通过上面的 preg_replace)我正在包装在 * 中输入的每个单词。我也试过用 *,

包裹整个字符串
$search = '*' . $search . '*';

但结果不太准确。除了extended2之外,我已经尝试过其他搜索模式,但都没有运气。 (情况变得更糟)我添加了一个选项来忽略配置中的空格,希望它能更好地选择“John S”之类的东西,但仍然没有运气。

大多数情况下,我只是希望人们能够通过输入名字+姓氏首字母来找到用户。这是人们尝试查找用户名的一种常见方式,但目前他们不能。

非常感谢任何帮助。谢谢!

编辑:

在大量搜索中我发现了这个:http://sphinxsearch.com/forum/view.html?id=5757

似乎在使用空格进行搜索时可能存在一些错误/不一致。但如果有人有任何想法,请发表评论。谢谢!

【问题讨论】:

    标签: php autocomplete sphinx


    【解决方案1】:

    开启部分索引。

    环顾四周: min_infix_len min_prefix_len

    【讨论】:

    • 我已经在使用“min_infix_len = 3”,这就是“John St”和“John”在寻找“John Stearns”之类的东西时的工作方式。但是“John S”行不通……
    猜你喜欢
    • 1970-01-01
    • 2020-08-01
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 2019-05-04
    相关资源
    最近更新 更多