问题描述
我使用的是 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 的所有可能组合。相反,它似乎只索引两个版本:
-
part1-part2.part3
(blend_chars 完好无损) -
part1 part2 part3
(忽略 blend_chars,视为空格)
如果为真,我会认为这是一个错误,因为它往往会破坏仅使用一个 blend_chars 的搜索。
谁能确认他们看到了相同的行为?任何人都可以提出有关如何修复或解决它的提示吗?
非常感谢!
解决方法
当您对 blend_chars = .,-
或 part2.part3
进行 part1-part2
和 search 时,Sphinx 会将它们作为单个标记保留,它不会将它们转换为 {{1} } 和 part2 AND part3
。
但是当您索引 part1 AND part2
时,它会生成 4 个标记:part1-part2.part3
、part1-part2.part3
、part1
和 part2
。这就是为什么用 part3
或 part1-part2
都找不到它们的原因。
解决方案是不要在查询中使用混合字符。如果您想使其自动化,您可以使用 part2.part3
来查看在搜索查询之前的索引期间如何对其进行标记化,然后使用结果来修改您的查询,例如:
CALL KEYWORDS