Solr 8.10执行Join查询无返回结果问题排查求助
Solr 8.10 Join查询返回空结果排查方案
- 首先验证子查询是否能正常命中目标文档
单独执行查询q=___target.zip:08271,确认是否返回id为48的文档。如果此步无结果,说明问题出在___target.zip字段本身:检查你配置的___target*动态字段类型,如果是数值类型,0开头的08271会被解析错误;如果是分词文本类型,也可能出现匹配失败的问题,可将该动态字段配置为string类型后重新写入数据测试。 - 验证关联字段是否精确匹配
分别执行两个查询:q=entity_docRef1:"BusinessPartner/Tomas"q=entity_docRef2:"BusinessPartner/Tomas"
确认前者返回id=48的文档,后者返回id=44的文档。string类型为精确匹配,只要两个值存在空格、大小写、特殊字符转义的差异,都会导致关联失败。 - 检查关联字段的docValues配置
Solr的Join查询要求from、to对应的两个字段必须开启docValues="true"才能正常执行关联逻辑,即使字段是string类型,未开启docValues也会返回空结果。你可以在Solr管理后台的Schema页面查看entity_docRef1、entity_docRef2的属性配置,未开启的话修改schema后重启实例,重新写入数据再测试。 - 分片集群场景的特殊处理
如果你使用的是SolrCloud分片集群,默认Join仅在单分片内执行,如果两条测试数据被路由到不同分片,会无法匹配。你可以在Join语句中添加crossCollection=true参数,或者在查询请求中添加join.cachekeys=true开启跨分片Join支持。 - 排查额外过滤条件
检查你的查询请求中是否添加了fq(过滤查询)、权限过滤等其他限制条件,这些条件可能会把id为44的文档从结果中过滤掉,你可以清空所有其他参数,仅保留q参数测试。
内容的提问来源于stack exchange,提问作者TomasBajus
相关产品推荐
相关产品推荐

