【问题标题】:SOLR - Double search by one field with two sortingsSOLR - 通过一个字段进行两次排序的双重搜索
【发布时间】:2016-10-29 08:53:14
【问题描述】:

我们在 solr 文档中有任何事件的即将到来的日期 (upcomingDate fireld)。我们需要从现在到未来(右方向)的 ASC 排序中的事件和从现在到过去(左方向)的 DESC 排序中的事件得到结果。我们如何在一个查询中做到这一点?

例如:

结果:NEADH

【问题讨论】:

    标签: solr lucene


    【解决方案1】:

    尝试以下排序查询

    if(gte(ms(upcomingDate,NOW),0),ms(upcomingDate,NOW),sum(ms(NOW,upcomingDate),4125333600000)) asc

    凡是大于等于现在的都会自然升序排序(问题描述图中N E A)。 另一方面,小于现在的所有内容都将从现在减去并添加到对应于遥远未来日期的毫秒(我在此示例代码中使用了 2100 年)。通过这种方式,您可以实现过去日期的降序(问题描述图中的D H)。

    总之:N E A D H

    如果有人想在 Solr 发行版提供的 techproducts 集合上尝试此查询: if(gte(ms(manufacturedate_dt,2006-02-13T15:26:36Z),0),ms(manufacturedate_dt,2006-02-13T15:26:36Z),sum(ms(2006-02-13T15:26:36Z,manufacturedate_dt),4125333600000)) asc

    【讨论】:

    • 我试过这个并得到“无法对多值字段进行排序:if(gte(ms(upcomingDate,NOW),0),ms(upcomingDate,NOW),sum(ms(NOW,upcomingDate) ,4125333600000))"
    • Dimka 请查看Solr Common Query Parameter 页面。在那里你可以看到“排序可以在文档的“分数”上完成,或者在任何 multiValued="false" indexed="true" 字段上进行,前提是该字段是非标记化的(即:没有分析器)或使用仅生成单个 Term 的分析器(即:使用 KeywordTokenizer)“。尝试将“upcomingDate”字段的类型更改为简单值。
    • 如果我对我的日期字段使用简单的操作(如 ms(upcomingDate,NOW) 或 sum(ms(N‌​OW,upcomingDate)) - 一切都很好,但如果我用 gte(ms (upcomingDate,NOW),0) - 我得到这个错误
    • Btw 在模式中我有日期类型=“日期”索引=“真”存储=“真”。还有一个问题 - 系统如何知道用于排序的字段?
    • Dimka 能否请您发布错误?在您的上一条评论中,您提到:“我收到此错误”。关于排序的问题,所有日期类型的字段都可以用于排序。 Solr 将根据您的 sort 查询参数决定考虑哪些字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    相关资源
    最近更新 更多