Solr中如何将日期时间列表与带时间戳的日期进行对比
Solr多值日期字段(DateList)与单个时间戳对比方法
只要你的from_datetime字段配置的是Solr标准日期类型(DatePointField/TrieDateField),不需要额外开发,直接用原生查询语法即可完成对比,以下是不同需求的查询示例,以你给出的数据为例:
索引的
from_datetime值:["2021-08-27T00:00:00Z", "2021-08-12T00:00:00Z", "2021-08-25T02:21:00Z"]
用户输入时间:2021-08-25T03:21:00Z
匹配列表存在至少1个值大于输入时间的文档
范围查询语法,[表示包含端点,*表示无上限:q=from_datetime:[2021-08-25T03:21:00Z TO *]你给出的示例文档符合该查询条件(存在值2021-08-27T00:00:00Z大于输入时间)。
匹配列表存在至少1个值小于输入时间的文档
如需小于等于,把末尾的}替换为]即可:q=from_datetime:[* TO 2021-08-25T03:21:00Z}你给出的示例文档符合该查询条件。
匹配列表所有值都大于输入时间的文档
结合函数查询统计符合条件的数值占比,逻辑为统计小于等于输入时间的日期数量,数量为0即符合要求:q={!frange l=0 u=0}count(map(from_datetime,[* TO 2021-08-25T03:21:00Z],0,1))你给出的示例文档不符合该查询条件。
匹配列表存在和输入时间完全相等的值的文档
精确匹配语法:q=from_datetime:"2021-08-25T03:21:00Z"你给出的示例文档不符合该查询条件。
注意事项
- 所有查询传入的时间格式必须和Solr索引存储的格式完全一致,需要带
T分隔符和Z时区后缀,否则会触发格式解析错误。 - 如涉及自定义时区,需提前在字段配置中统一时区规则,避免出现时间对比偏差。
内容的提问来源于stack exchange,提问作者Anshul Verma
相关产品推荐
相关产品推荐

