在Solr Hybris中通过_root_关联父子记录并按日期过滤订单
基于Solr _root_关联与ScheduleLineDetail日期过滤获取订单的方案
核心思路
利用所有关联文档(Order、OrderEntry、ScheduleLineDetail)共享相同_root_字段值的特性,通过Solr的Join查询或分步查询,先筛选出符合日期条件的ScheduleLineDetail文档,再关联匹配对应的Order文档。
方法一:一次性Join查询(推荐)
通过Solr的Join语法,直接在过滤条件中关联_root_字段,一次请求完成筛选和关联:
q=type_string:Order &fq={!join from=_root_ to=_root_}type_string:ScheduleLineDetail AND date:[2023-04-01T00:00:00Z TO 2023-04-30T23:59:59Z]
参数说明
q=type_string:Order:指定最终返回的文档类型为Order{!join from=_root_ to=_root_}:表示基于_root_字段做关联,将满足后续条件的文档的_root_与Order的_root_匹配type_string:ScheduleLineDetail AND date:[...]:筛选出日期在指定范围内的ScheduleLineDetail文档,以此为关联依据
方法二:分步查询
如果需要先确认符合条件的_root_集合,可分两步执行:
- 获取符合日期条件的ScheduleLineDetail的
_root_列表
q=type_string:ScheduleLineDetail AND date:[2023-04-01T00:00:00Z TO 2023-04-30T23:59:59Z] &fl=_root_ &rows=10000 # 根据实际数据量调整返回行数上限
- 用
_root_列表查询对应的Order
将第一步得到的_root_值(如7503、7504等)作为过滤条件:
q=type_string:Order &fq=_root_:(7503 7504 7505)
注意事项
- 确保
date字段在Solr schema中定义为日期类型(如date或pdate),否则日期范围查询无法生效 - Join查询适合数据量较大的场景,一次请求完成关联;分步查询适合需要单独验证中间结果的场景
内容的提问来源于stack exchange,提问作者Diya Jimmy
相关产品推荐
相关产品推荐

