【问题标题】:How to search for dates before 1970 with thinking sphinx?如何用思维狮身人面像搜索 1970 年之前的日期?
【发布时间】:2015-02-03 23:06:49
【问题描述】:

我在我的 Rails 应用中有这样的搜索:

Publication.search(terms, :with => {:publish_date => start_date..end_date})

但是,如果 start_date 早于 1970 年 1 月 1 日,由于 UNIX 时间戳,将不会显示结果。我的记录的 publish_date 早于 1970 年,所以我只是想知道最好的解决方案是什么,因为我还没有找到。

【问题讨论】:

    标签: ruby-on-rails thinking-sphinx


    【解决方案1】:

    您可以考虑按日期将它们存储为整数,而不是时间戳:例如1970 年 1 月 1 日变为 19700101。

    这确实意味着您需要在索引定义中手动将日期转换为适当的格式,并相应地翻译搜索请求。

    【讨论】:

    • 有什么方法可以在不改变数据库的情况下进行转换?就像我尝试这样做:indexes publish_date.gsub("-", "").to_i, :as => :publish_date, :sortable => true 在索引文件中,但我没有得到任何启用的本地索引来搜索错误。通过索引文件尝试了几种不同的方法,但还没有成功。
    • 如果您使用 SQL 支持的索引 (:with => :active_record),那么您需要在 SQL sn-p:has "CAST(publish_date as varchar)...", :as => :publish_date, :sortable => true 中进行该转换。显然,那里的 SQL 需要工作 - 将把它留给你 :)
    • 哦,但是如果您使用实时索引,那么您需要在模型中使用一个方法来返回调整后的整数,然后在索引定义中使用该新方法:has publish_date_as_int, :as => :publish_date, :type => :integer
    • 太棒了!经过一些修补后,我选择了has "CAST(DATE_FORMAT(publish_date, '%Y%m%d') AS SIGNED)", :as => :publish_date, :type => :integer, :sortable => true,我还在我的模型逻辑中将它们转换为整数以进行搜索。非常感谢您的帮助,我花了一段时间才弄清楚。
    • 不用担心。另外:您不需要:sortable => true - 所有属性本质上都是可排序的。该选项仅对您要排序的字段是必需的(然后它只是为该字段创建匹配属性)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 2013-07-26
    相关资源
    最近更新 更多