--- title: "Join键只能使用一次,发现重复项 – 如何解决此Elasticsearch异常" date: 2026-02-28 lastmod: 2026-02-28 description: "当Elasticsearch查询中存在重复的join键时会出现此错误。join键用于在父子关系中链接文档。重复的join键会导致混淆和错误结果。解决方法是确保每个join键都是唯一的。" tags: ["Elasticsearch", "异常处理", "Join查询", "父子关系", "查询优化"] summary: "版本: 8.6-8.9 简而言之,当Elasticsearch查询中存在重复的join键时会出现此错误。join键用于在父子关系中链接文档。存在重复的join键会导致混淆和错误结果。要解决此问题,请确保每个join键都是唯一的。您可以通过在索引之前检查数据,或使用脚本自动生成唯一的join键来实现这一点。此外,还要检查您的查询,确保它们没有创建重复的join键。 日志上下文 # 日志 “Join keys must be used only once; found duplicates: [{}]” 的类名是 LogicalPlanBuilder.java. 我们从Elasticsearch源代码中提取了以下内容,供那些寻求深入上下文的人参考: Source src = source(joinTermCtx.by != null ? joinTermCtx.by : joinTermCtx); StringJoiner duplicates = new StringJoiner(";"); for (String duplicate : duplicateKeyNames) { duplicates.add(duplicate); } throw new ParsingException(src; "Join keys must be used only once; found duplicates: [{}]"; duplicates.toString()); } } if (queries.size() < 2) { throw new ParsingException(source; "A sample requires a minimum of 2 queries; found [{}]"; queries." --- > **版本:** 8.6-8.9 简而言之,当Elasticsearch查询中存在重复的join键时会出现此错误。join键用于在父子关系中链接文档。存在重复的join键会导致混淆和错误结果。要解决此问题,请确保每个join键都是唯一的。您可以通过在索引之前检查数据,或使用脚本自动生成唯一的join键来实现这一点。此外,还要检查您的查询,确保它们没有创建重复的join键。 日志上下文 ----------- 日志 "Join keys must be used only once; found duplicates: [{}]" 的类名是 [LogicalPlanBuilder.java.](https://www.geeksforgeeks.org/java-lang-class-class-java-set-1/) 我们从Elasticsearch源代码中提取了以下内容,供那些寻求深入上下文的人参考: ```java Source src = source(joinTermCtx.by != null ? joinTermCtx.by : joinTermCtx); StringJoiner duplicates = new StringJoiner(";"); for (String duplicate : duplicateKeyNames) { duplicates.add(duplicate); } throw new ParsingException(src; "Join keys must be used only once; found duplicates: [{}]"; duplicates.toString()); } } if (queries.size() < 2) { throw new ParsingException(source; "A sample requires a minimum of 2 queries; found [{}]"; queries.size()); ```