我正在使用Sphinx 2.2.11,并相信我发现了一个有关Sphinx如何索引包含多个混合字符实例的术语的错误。
例如,我将连字符和句点设置为blend_chars:
blend_chars = ., -
假设我在数据库中有一个术语如下:
part1-part2.part3
我希望Sphinx将为每个blend_char在所有可能的组合中为该术语建立索引。例如:
part1-part2.part3
part1 part2.part3
part1-part2 part3
part1 part2 part3
但是,事实并非如此。
如果我搜索:
part2.part3
我找不到包含该词的记录part1-part2.part3
。
但是,如果我搜索:
part2 part3
要么
part1 part2 part3
我确实找到了记录。
这向我暗示了狮身人面像并没有索引blend_chars的所有可能组合。相反,它似乎仅索引两个版本:
part1-part2.part3
(具有blend_chars完整无缺)part1 part2 part3
(忽略blend_chars,将其视为空白)如果为true,我会认为这是一个错误,因为它往往会破坏仅使用blend_chars之一的搜索。
任何人都可以确认他们看到的行为相同吗?谁能提出有关修复或解决它的提示?
非常感谢!
当你有blend_chars = ., -
和搜索的part2.part3
或part1-part2
狮身人面像离开那些视为单个标记,它不会将它们转换为part2 AND part3
和part1 AND part2
。
但是当你索引 part1-part2.part3
它产生4个令牌:part1-part2.part3
,part1
,part2
和part3
。因此,您无法使用part1-part2
或来找到它们part2.part3
。
解决方案是在查询中不要使用混合字符。如果要使其自动化,可以使用CALL KEYWORDS
它在搜索查询之前先查看如何在索引编制过程中对令牌进行标记,然后使用结果修改查询,例如:
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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句