如何通过ChildDocTransformer按日期范围过滤Solr子文档?
用ChildDocTransformer过滤有效子文档
嘿,这个需求刚好是ChildDocTransformer的典型应用场景,直接在fl参数的childFilter里写日期范围条件就行,给你捋清楚怎么弄:
核心查询示例(用当前日期过滤)
如果要筛选当前UTC时间落在子文档startDate_dt和endDate_dt区间内的子文档,对应的Solr查询可以这么写:
q=*:* fl=*, [child parentFilter=docType:"VEHICLE" childFilter=startDate_dt:[* TO NOW/DAY] AND endDate_dt:[NOW/DAY TO *]]
关键细节拆解
NOW/DAY是Solr自带的日期变量,会自动取当前UTC日期的零点,能避免时分秒的干扰;如果业务需要精确到具体时间,直接用NOW就行- 别给子文档字段加父文档前缀(比如你之前写的
promotion.startDate_dt是多余的,直接用子文档本身的字段名startDate_dt就好) - 过滤逻辑是:子文档的起始日期≤当前日期 并且 结束日期≥当前日期,确保当前时间完全落在有效区间内
进阶:用固定日期过滤
如果不是用当前时间,而是指定某个固定日期(比如你示例里的2018-04-03),可以这么写:
q=*:* fl=*, [child parentFilter=docType:"VEHICLE" childFilter=startDate_dt:[* TO 2018-04-03T00:00:00Z] AND endDate_dt:[2018-04-03T00:00:00Z TO *]]
避坑提醒
- 一定要确保子文档的
startDate_dt和endDate_dt字段是Solr的date类型,不然日期范围查询会直接失效 - 就算父文档和子文档有同名字段也不用担心,
childFilter只会作用于子文档的字段,不会影响父文档的内容
内容的提问来源于stack exchange,提问作者Raibaz
相关产品推荐
相关产品推荐

