Sphinx 斯芬克斯搜索:在一个术语中处理多个混合字符的错误?
我正在使用Sphinx2.2.11,我相信我发现了一个关于Sphinx如何索引包含多个混合角色实例的术语的错误 例如,我将连字符和句点设置为blend_chars: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
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)