在Flexible Search中合并两个无关联查询以获取所有删除项
合并查询获取索引器删除项方案
我们需要在自定义索引器中实现删除逻辑:
- 删除类别时,对应记录会存入
SolrDeletedItem表 - 删除产品时,仅将其审批状态设置为
unapproved
要获取指定时间范围内的所有待删除项(类别+产品),可以用UNION ALL合并两个独立查询,最终SQL如下:
SELECT {deletedItemPK} AS pk FROM {SolrDeletedItem AS sdi JOIN ComposedType AS ct ON {sdi.deletedItemType} = {ct.pk}} WHERE {ct.code} = 'Category' AND {sdi.modifiedtime} >= ?lastIndexTime UNION ALL SELECT {p.PK} AS pk FROM {Product AS p JOIN ArticleApprovalStatus AS aas ON {aas.pk} = {p.approvalStatus}} WHERE {aas.code} = 'unapproved' AND {p.modifiedtime} >= ?lastIndexTime
说明:
- 用
UNION ALL而非UNION:因为两个查询的结果集无重复(类别和产品的主键属于不同业务实体,不会重叠),UNION ALL不需要做去重处理,性能更优 - 统一输出字段名:两个子查询都将结果字段命名为
pk,保证合并后的结果结构一致 - 时间条件复用:两个查询都保留了
modifiedtime >= ?lastIndexTime的过滤条件,确保只获取索引器上次运行后新增的待删除项
内容的提问来源于stack exchange,提问作者iamrooovic
相关产品推荐
相关产品推荐

