Sphinx 斯芬克斯搜索:在一个术语中处理多个混合字符的错误?

Sphinx 斯芬克斯搜索:在一个术语中处理多个混合字符的错误?,sphinx,Sphinx,我正在使用Sphinx2.2.11,我相信我发现了一个关于Sphinx如何索引包含多个混合角色实例的术语的错误 例如,我将连字符和句点设置为blend_chars: blend_chars = ., - 假设我在数据库中有一个术语,如下所示: part1-part2.part3 我希望斯芬克斯会在每个混合字符的所有可能组合中为这个术语编制索引。例如: 变体1:part1-part2.part3 变体2:part1第2部分。part3 变量3:part1-part2-part3 变体4:第1

我正在使用Sphinx2.2.11,我相信我发现了一个关于Sphinx如何索引包含多个混合角色实例的术语的错误

例如,我将连字符和句点设置为blend_chars:

blend_chars = ., -
假设我在数据库中有一个术语,如下所示:

part1-part2.part3
我希望斯芬克斯会在每个混合字符的所有可能组合中为这个术语编制索引。例如:

  • 变体1:
    part1-part2.part3
  • 变体2:
    part1第2部分。part3
  • 变量3:
    part1-part2-part3
  • 变体4:
    第1部分第2部分第3部分
然而,情况似乎并非如此

如果我搜索:

part2.part3
part2 part3
我找不到包含术语
part1-part2.part3
的记录

但是,如果我搜索:

part2.part3
part2 part3

我确实找到了记录

这对我来说意味着斯芬克斯并没有索引所有可能的混合焦的组合。相反,它似乎只索引了两个版本:

  • part1-part2.part3
    (混合炭完好无损)
  • part1 part2 part3
    (忽略混合字符,视为空白)
  • 如果是真的,我会认为这是一个bug,因为它倾向于破坏只使用BLANDYCHARS的搜索。

    有人能证实他们看到了同样的行为吗?有人能就如何修复或解决它提出建议吗


    非常感谢

    当你有
    blend_chars=,-
    搜索
    part2。part3
    part1-part2
    Sphinx将它们作为单个标记保留,它不会将它们转换为
    part2和part3
    part1和part2

    但是当您索引
    part1-part2.part3
    时,它会生成4个标记:
    part1-part2.part3
    part1
    part2
    part3
    。这就是为什么使用
    part1-part2
    part2.part3
    都找不到它们的原因

    解决方案是在查询中不使用混合字符。如果您想使其自动化,您可以使用
    调用关键字
    查看在搜索查询之前的索引化过程中它将如何标记,然后使用结果修改查询,例如:

    mysql> call keywords('part1-part2.part3', 'blend');
    +------+-------------------+-------------------+
    | qpos | tokenized         | normalized        |
    +------+-------------------+-------------------+
    | 1    | part1-part2.part3 | part1-part2.part3 |
    | 1    | part1             | part1             |
    | 2    | part2             | part2             |
    | 3    | part3             | part3             |
    +------+-------------------+-------------------+
    4 rows in set (0.00 sec)