--- title: "无法在滚动上下文中使用字段折叠功能 - 如何解决此Elasticsearch异常" date: 2026-03-26 lastmod: 2026-03-26 description: "当尝试在Elasticsearch的滚动上下文中使用collapse字段折叠功能时会报错。Elasticsearch不支持同时使用这两个特性。解决方法包括:从查询中移除collapse功能,或停止使用scroll而改用分页,或在检索结果后在应用代码中执行折叠操作。" tags: ["Elasticsearch", "字段折叠", "滚动查询", "查询冲突", "搜索异常"] summary: " 版本: 6.8-8.9 简要来说,当您尝试在Elasticsearch的滚动上下文中使用collapse(字段折叠)功能时,会出现此错误。collapse功能用于根据某个字段折叠搜索结果,而scroll(滚动)用于检索大量结果。Elasticsearch不支持同时使用这两个功能。要解决此问题,您可以从查询中移除collapse功能,或者停止使用scroll并对结果进行分页。另外,您也可以在检索结果后在应用程序代码中执行折叠操作。 日志上下文 # 日志"cannot use collapse in a scroll context"(无法在滚动上下文中使用collapse)的类名是 SearchService.java。 我们从Elasticsearch源代码中提取了以下内容,供那些寻求深入上下文的人参考: context.storedFieldsContext(source.storedFields()); } if (source.collapse() != null) { if (context.scrollContext() != null) { throw new SearchException(shardTarget; "cannot use `collapse` in a scroll context"); } if (context.rescore() != null && context.rescore().isEmpty() == false) { throw new SearchException(shardTarget; "cannot use `collapse` in conjunction with `rescore`"); } final CollapseContext collapseContext = source.collapse().build(searchExecutionContext); " --- > **版本:** 6.8-8.9 简要来说,当您尝试在Elasticsearch的滚动上下文中使用`collapse`(字段折叠)功能时,会出现此错误。`collapse`功能用于根据某个字段折叠搜索结果,而scroll(滚动)用于检索大量结果。Elasticsearch不支持同时使用这两个功能。要解决此问题,您可以从查询中移除`collapse`功能,或者停止使用scroll并对结果进行分页。另外,您也可以在检索结果后在应用程序代码中执行折叠操作。 日志上下文 ----------- 日志"cannot use `collapse` in a scroll context"(无法在滚动上下文中使用collapse)的类名是[SearchService.java。](https://www.geeksforgeeks.org/java-lang-class-class-java-set-1/) 我们从Elasticsearch源代码中提取了以下内容,供那些寻求深入上下文的人参考: ```java context.storedFieldsContext(source.storedFields()); } if (source.collapse() != null) { if (context.scrollContext() != null) { throw new SearchException(shardTarget; "cannot use `collapse` in a scroll context"); } if (context.rescore() != null && context.rescore().isEmpty() == false) { throw new SearchException(shardTarget; "cannot use `collapse` in conjunction with `rescore`"); } final CollapseContext collapseContext = source.collapse().build(searchExecutionContext); ```