【问题标题】:Indexing calculated field for search conditions in Thinking SphinxThinking Sphinx 中搜索条件的索引计算字段
【发布时间】:2009-07-18 02:02:21
【问题描述】:

我设置了一个产品模型,我正在尝试使用 Thinking Sphinx 进行搜索。该模型有一个名为 status 的属性,在指定日期内可以是 Active、Not active 或 Active。

我希望能够将我的搜索结果限制为有效的产品。 IE。在日期期间处于活动状态或处于活动状态,并且当前时间在这些日期之间。

我是 Rails 的初学者,所以我正在寻找有关如何实现它的建议。我考虑在我的模型中放置一个布尔方法来计算这个逻辑,但我不认为这可以被 Sphinx 索引。

我使用 MySQL 作为数据库服务器。

有人有什么好主意吗?

【问题讨论】:

  • 我只是想解决这个问题的一种方法是创建一个名为 is_active 的额外字段,并在每晚运行一个 cron 作业,如果状态为活动或当前时间,则将该字段设置为 true在指定日期之间,否则将其设置为 false。我想我还需要覆盖模型中的保存命令,以对单个产品执行相同的操作,如果它们的状态在更新中发生更改。

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


【解决方案1】:

你是对的,你模型上的 ruby​​ 方法对 sphinx 是不可用的。但是,您可以将该方法重新创建为 sphinx 属性。这些可以使用 SQL 片段轻松实现,如下所示:

class Person < ActiveRecord::base
  ...


  define_index do
    has "status = 'active' and now() > start_date and now() < end_date", :as => :active, :type => :boolean
  end

  ...
end

这样使用字符串指定字段或属性与构建 SQL 查询时指定自定义列相同。

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 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
    相关资源
    最近更新 更多