Hybris Solr中商品删除索引任务执行失败问题排查
- Hybris版本:2105.21
- 商品总数:1121500条
- 关联CronJob的任务查询语句:
SELECT {p:PK} FROM {Product AS p},{ArticleApprovalStatus as ap} WHERE {p.approvalStatus}={ap.pk} and {ap.code} not in ('approved')
- 错误现象:CronJob启动后立即进入「Aborted - Error」状态
- 错误日志:
2023-04-06 07:31:02.762 ERROR (qtp1493988307-28) [c:master_Product_flop s:shard1 r:core_node5 x:master_Product_flop_shard1_replica_n2] o.a.s.h.RequestHandlerBase org.apache.solr.common.SolrException: org.apache.solr.search.SyntaxError: Cannot parse 'pk:(8798097276929 OR 8798097309697 OR 8798097342465 OR 8798097473537 OR 8798097604609 OR 8798097637377 OR 8798097670145 OR 8798097702913 OR 8798097735681 OR 8798097833985 OR 8798097866753 OR 8798097899521 OR 8798097932289 OR 8798097997825 OR 8798098030593 OR 8798098096129 OR 8798098128897 OR 8798098161665 OR 8798098194433 OR 8798098227201 OR 8798098259969 OR 8798098292737 OR 8798098325505 OR 8798098358273 OR 8798098391041 OR 8798098423809 OR 8798098456577 OR 8798098489345 OR 8798098522113 OR 8798098554881 OR 8798098587649 OR 8798098620417 OR 8798098718721 OR 8798098784257 OR 8798098849793 OR 8798098882561 OR 8798099013633 OR 8798099046401 OR 8798099079169 OR 8798099144705 OR 8798099177473 OR 8798099210241 OR 8798099275777 OR 8798099341313 OR 8798099406849 OR 8798099439617 OR 8798099505153 OR ...........
核心原因
任务查询返回的未审核商品PK数量过多,这些PK被拼接成Solr的pk:(...)查询条件时,长度超出了Solr允许的最大查询语句长度限制,触发语法解析错误,导致CronJob直接终止。
可行修复方案
1. 启用任务分页处理(推荐)
修改CronJob的任务配置,添加分页参数,分批次获取并处理商品PK,避免一次性生成超长Solr查询:
- 在FlexibleSearch查询语句末尾添加分页逻辑:
SELECT {p:PK} FROM {Product AS p},{ArticleApprovalStatus as ap} WHERE {p.approvalStatus}={ap.pk} and {ap.code} not in ('approved') LIMIT ?batchSize OFFSET ?offset - 在CronJob设置中配置合理的
batchSize值(如1000、5000),让任务分批次执行。
2. 调整Solr参数阈值(临时方案)
修改Solr节点的solrconfig.xml文件,增大maxBooleanClauses参数值(默认1024),比如设置为10000,允许Solr处理更多OR条件。但此方法可能影响Solr性能,不建议长期使用。
3. 优化查询逻辑,跳过PK列表传递(最优方案)
如果Solr已同步approvalStatus字段,直接在Solr查询中过滤未审核商品,无需通过Hybris查询PK再传递:
- 使用Solr过滤条件:
approvalStatus:(* NOT "approved"),彻底避免超长PK列表的问题。
内容的提问来源于stack exchange,提问作者Rabia

