【问题标题】:Solr (Sunspot) conditional order_bySolr(太阳黑子)条件 order_by
【发布时间】:2017-05-15 10:50:38
【问题描述】:

我在我的 Rails 应用程序中使用 Solr sunspot gem。我现在拥有的:order_by(:some_time, :desc)。我需要做的是:

如果:some time 列值在最后一小时内,则所有符合此条件的记录按:status 列排序,否则按:some_time 列排序

我在文档中没有找到类似的东西,我不确定什么是实现这一点的好方法。

PS:我尝试在solr搜索完成后进行分组和排序,但是看起来很重,我相信事情应该是一致的,所以如果有机会用solr做的话,我想去。

【问题讨论】:

  • 例如如果结果有 100 条记录,其中 25 条满足条件,那么您是希望 25 条按status 排序,其余按sometime 排序,还是所有记录按status 排序?
  • @Md.FarhanMemon 如果其中 25 个满足条件 (:some_time > Time.now - 1.hour) 然后按 :status 和 :some_time 订购,其他所有按 :some_time 订购

标签: ruby-on-rails solr sunspot-rails


【解决方案1】:

太阳黑子 gem 会让你说 order_by_function 以使用 Solr 的 functional ordering ability(查找“按功能搜索”)。所以在我看来你可以这样做或类似的事情(未经测试):

order_by_function(:map, [:ms, [:NOW, :some_date], '0', '3600000', '0'], :status)

换句话说:以毫秒为单位查找文档的年龄,以及 1 小时内的任何内容“扁平化”为 0(因此它们都是并列的)。通过按状态排序来打破关系。看起来应该可以吧?

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 2014-03-29
    • 1970-01-01
    相关资源
    最近更新 更多