如何在 SOLR 中按日期排序?

Posted

技术标签:

【中文标题】如何在 SOLR 中按日期排序?【英文标题】:How to sort by date in SOLR? 【发布时间】:2012-10-09 20:33:24 【问题描述】:

我想对 SOLR 搜索返回的结果和分数进行排序,如何根据日期获得分数,如下所示:

Suppose for keywords "football"
  12-10-2012 - 3.2
  13-10-2012 - 1.5

我的 solr 日期归档如下:

  <field name="published_date" datetimeformat="dd-MM-yyyy"  type="date" indexed="true" stored="true"/>

我检查了这个docs,但找不到。

谢谢。

【问题讨论】:

【参考方案1】:

你可以在URL中传递sort参数

例如sort=published_date desc 用于按发布日期降序排列的文档。

如果要按分数和日期排序,可以使用sort=score desc, published_date desc

【讨论】:

当 m 查询 solr 服务器时,sort=published_date desc 中的 date 和 desc 之间的空间被替换 %20【参考方案2】:

取自the wiki

Although not technically a Syntax difference, please note that if you use 
the Solr "DateField" type, any queries on those fields (typically range queries) 
should use either the Complete ISO 8601 Date syntax that field supports, 
or the DateMath Syntax to get
relative dates. Examples:

timestamp:[* TO NOW]

createdate:[1976-03-06T23:59:59.999Z TO *]

createdate:[1995-12-31T23:59:59.999Z TO 2007-03-06T00:00:00Z]

pubdate:[NOW-1YEAR/DAY TO NOW/DAY+1DAY]

createdate:[1976-03-06T23:59:59.999Z TO 1976-03-06T23:59:59.999Z+1YEAR]

createdate:[1976-03-06T23:59:59.999Z/YEAR TO 1976-03-06T23:59:59.999Z] 

NOTE:TO must be uppercase, or Solr will report a 'Range Goop' error. 

将它与this 结合起来,工作就完成了 :) 这很简单,只需要在开始时进行一些尝试

稍作修改:此方法允许您根据日期范围检索值并根据它们的值对它们应用分数提升。显然你是在询问如何根据基本分数和日期检索排序,所以我的答案不是 100% 正确的

【讨论】:

以上是关于如何在 SOLR 中按日期排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MongoDB 中按日期对集合进行排序?

如何在 SQL 中按多列分组并按日期排序?

如何在 Laravel 中按日期排序消息

laravel 如何在 yajra 数据表中按创建日期排序

如何在Solr中对日期字段进行排序?

如何在uitableview的cellForRowAt函数中按标题日期对响应进行排序