gpt4 book ai didi

mysql - Thinking-sphinx 返回不符合标准的结果

转载 作者:行者123 更新时间:2023-11-29 08:01:05 26 4
gpt4 key购买 nike

我有一个模型practice_test_result,我已为其定义了索引,如下所示:

ThinkingSphinx::Index.define :practice_test_result, with: :active_record, delta: true do
indexes [student.first_name, student.last_name], :as => :student_name

set_property :min_infix_len => 1
end

在下面列出的某些情况下,搜索测试结果会返回意外结果:

> PracticeTestResult.search('x').map{|x| x.student.name }                                             
=> []

这符合预期,因为所有学生姓名中都没有“x”。

> PracticeTestResult.search('p').map{|x| x.student.name } 
=> ["Jane Doe", "Jane Doe", "David Doe", "Timothy Doe", "Jane Doe"]

这不是预期的,因为所有学生姓名中都没有“p”。

> PracticeTestResult.search('ti').map{|x| x.student.name }
=> ["Jane Doe", "Jane Doe", "David Doe", "Timothy Doe", "Jane Doe"]

再次不符合预期;应该只返回一个值 Timothy Doe

> PracticeTestResult.search('tim').map{|x| x.student.name }
=> ["Timothy Doe"]

按预期工作。

关于如何调试这个问题有什么建议吗?这可能是因为 min_infix_len 设置得太低(1)吗?

Sphinx 版本:Sphinx 2.1.7-release (rel21-r4638)

Thinking-Sphinx 版本:3.1.1

数据库:MySql

Rails 版本:3.2.13

最佳答案

您所面临的情况仅当您的模型中有继承列(默认情况下名为 type)时才会发生(无论您是否将其用于 STI -认为斯芬克斯无法弄清楚这一点)。

为了允许跨 STI 层次结构的某些子类进行查询,Thinking Sphinx 添加了一个名为 sphinx_internal_class_name 的字段,用于将搜索结果限制为某些模型。在您的情况下,它将包含 'PracticeTestResult' - 因此,tip 返回所有对象。

正如您所发现的,解决方法是将查询限制在特定字段。

还值得注意的是,在 TS v3.0.x 的早期版本中,此内部字段始终存在。鉴于它仅在 STI 发挥作用时才有用,因此除非必要,现在不会添加它。

关于mysql - Thinking-sphinx 返回不符合标准的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23792862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com