微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。