使用Sphinx的错误搜索结果 - Ruby on Rails

时间:2016-12-01 10:04:26

标签: ruby-on-rails ruby full-text-search sphinx

我们请求你的帮助因为我们真的被困住了: - (

我们对使用Sphinx搜索的产品进行了大幅度升级

搜索之前一直运行良好,但现在升级结果绝对错误,经过多天的降级后,我们无法解决。

使用或不使用重音符号搜索应返回数百个结果,但现在只返回少量结果。 搜索结果完全错误,重音字符似乎被替换为什么都没有,好像charset_table被忽略了。

为了获得“hopital”或“hôpital”的良好效果,我们必须输入“hpital”....

当然我们使用charset_table,重新索引所有表,使用UTF8等。

在我们进行搜索工作之前:

  • Ruby on Rails 1.9.3
  • Sphinx 2.0.10
  • Riddle 1.5.12
  • 思考Sphinx 3.1.4
  • Mysql 5.5.52

我们破损的配置是:

  • Ruby on Rails 2.0.0
  • Sphinx 2.2.11
  • Riddle 2.0.0
  • 思考Sphinx 3.1.4
  • Mysql 5.5.52

提前感谢您的所有反馈

1 个答案:

答案 0 :(得分:0)

不确定是否足以建议 如何修复它,但可能能够解释它。

Sphinx有一个重写的标记器,它对无效的UTF8序列做出不同的响应。

以前无效的序列只会成为“分隔符”,所以搜索完全可能有效,因为“hôpital”只会被编入索引,查询会做同样的事情,所以“匹配”。

但是新的标记化器“丢弃”了无效的序列,所以如果“hôpital”被收到“错位”,它会被索引为hpital - 无效字节消失了。

(查询解析器没有改变,所以现在表现得与文本解析不一致)

因此,如果某种方式对UTF数据进行索引并不完全正确,那么行为就会发生变化。之前没有注意到因为它一直是错误的:)

所以也许确保sphinx从数据库中接收数据是正确的,可以修复它吗?像SET NAMES之类的东西。如果数据在sphinx处收到有效,那么它应该按照charset_table索引ok。