【问题标题】:Thinking Sphinx & Rails questions思考 Sphinx 和 Rails 问题
【发布时间】:2013-06-24 18:11:28
【问题描述】:

我正在构建我的第一个 Rails 应用程序,它与 Thinking Sphinx 配合得很好。我了解其中的大部分内容,但如果有人可以帮助我澄清一些概念性问题,我会很高兴

  1. 在 sphinx 查询后显示搜索结果时,我应该使用从 sphinx 查询返回的 sphinx_attributes 吗?或者我的视图应该使用普通的 rails 对象,例如@property.title、@property.amenities.title 等?如果我使用普通的 rails 对象,这是否意味着它会进行额外的查询?

  2. 在论坛中,我想显示“未读帖子”。显然,对于每个用户/主题组合,这都是真/假,所以我想我应该在主题的狮身人面像索引中缓存“读者”ID。这样,我可以快速查询给定 user_id 的所有未读帖子。我已经完成了这项工作,但后来意识到它毫无意义,因为狮身人面像索引之间存在时间延迟。因此,如果用户点击未读帖子,它仍然会显示为未读,直到 sphinx 数据库被重新索引

  3. 我仍在开发中,因此我正在手动索引/重建,但在生产环境中,重新索引之间的标准时间是多少?

  4. 我有一个包含多个文本字段的模型 - 我是否应该将这些都连接到 sphinx 索引中的一列中以进行关键字搜索?这肯定比索引所有单独的字段要快。

  5. 有点离题,但只是想知道 - 当您访问嵌套模型时,例如 @property.agents.name,这会影响性能吗?或者当从数据库中提取一个属性时,rails 会自动获取所有关联的条目吗?

【问题讨论】:

    标签: ruby-on-rails thinking-sphinx


    【解决方案1】:

    回答你的每一个观点:

    1. 对于您的两个示例,sphinx_attributes 将无济于事。首先,您已经加载了属性,因此标题可以直接使用,无需额外的数据库访问。对于property.amenities.title,您正在处理一个字符串数组,Sphinx 对此没有任何概念。一般来说,我只会将 sphinx_attributes 用于复杂的计算属性,而不是标准的列引用。

    2. 是的,你是对的,这个值会有延迟。

    3. 这取决于您的数据更改频率。我有一些应用程序可以每天索引,因为更改非常罕见,但其他应用程序我们将每 10 分钟运行一次。如果数据特别不稳定,我会考虑使用 deltas(通常通过 Sidekiq)在几秒钟内将变化反映在 Sphinx 中。

    4. 我认为这两种方式都没有太大区别 - 除非您想单独搜索这些列中的任何一个?如果是这样,它需要是一个单独的字段。

    5. 默认情况下,当您使用每个属性的代理时,该属性的代理将从数据库中加载(每个属性一个 SQL 调用)。您可以查看the eager loading docs,了解如何在处理多条记录时更好地管理它。思考 Sphinx has the ability:include 选项传递给底层的 ActiveRecord 调用。

    【讨论】:

    • 非常感谢您的详细回复!我无法将其标记为正确,因为我还没有声誉对不起,但我真的很感激!重新编号2,有没有更好的方法来解决这个问题?当然,它是一个足够常见的功能,我想对属性“关注列表”做同样的事情,但如果用户必须等待 10 分钟才能在他们的关注列表中看到属性,它几乎没有用
    • 也许值得一读增量,因为这可以将延迟减少到几秒钟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多