Sphinx 搜索:在单个术语中处理多个 blend_chars 的错误?

问题描述

我使用的是 Sphinx 2.2.11 并且相信我发现了一个关于 Sphinx 如何索引包含多个混合字符实例的术语的错误

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

blend_chars = .,-

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

part1-part2.part3

我希望 Sphinx 会在每个 blend_char 的所有可能组合中索引该术语。例如:

  • 变体 1:part1-part2.part3
  • 变体 2:part1 part2.part3
  • 变体 3:part1-part2 part3
  • 变体 4:part1 part2 part3

然而,情况似乎并非如此。

如果我搜索

part2.part3

我没有找到包含词条 part1-part2.part3 的记录。

但是,如果我搜索

part2 part3

part1 part2 part3

我确实找到了记录。

这向我表明 Sphinx 不会索引 blend_chars 的所有可能组合。相反,它似乎只索引两个版本:

  1. part1-part2.part3(blend_chars 完好无损)
  2. part1 part2 part3(忽略 blend_chars,视为空格)

如果为真,我会认为这是一个错误,因为它往往会破坏仅使用一个 blend_chars 的搜索

谁能确认他们看到了相同的行为?任何人都可以提出有关如何修复或解决它的提示吗?

非常感谢!

解决方法

当您对 blend_chars = .,-part2.part3 进行 part1-part2search 时,Sphinx 会将它们作为单个标记保留,它不会将它们转换为 {{1} } 和 part2 AND part3

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

解决方案是不要在查询中使用混合字符。如果您想使其自动化,您可以使用 part2.part3 来查看在搜索查询之前的索引期间如何对其进行标记化,然后使用结果来修改您的查询,例如:

CALL KEYWORDS

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...