--- title: "completion字段设置了search_analyzer时必须设置analyzer - 如何解决此Elasticsearch异常" date: 2026-03-04 lastmod: 2026-03-04 description: "当在Elasticsearch的completion字段上设置search_analyzer而没有设置analyzer时,会出现此错误。completion字段是Elasticsearch中的一种建议器类型,它需要同时设置analyzer和search_analyzer才能正常工作。" tags: ["字段映射", "analyzer配置", "completion字段", "搜索分析器"] summary: " 版本: 6.8-7.9 简而言之,当在Elasticsearch的completion字段上设置了search_analyzer而没有设置analyzer时,会出现此错误。completion字段是Elasticsearch中的一种建议器(suggester)类型,它需要同时设置analyzer和search_analyzer才能正常工作。要解决此问题,如果不需要search_analyzer,可以将其删除;或者在completion字段上设置analyzer。analyzer会在索引之前处理文本,而search_analyzer会在搜索查询期间处理文本。 日志上下文 # 日志 “analyzer on completion field [” + name + “] must be set when search_analyzer is set” 的类名是 CompletionFieldMapper.java。 我们从Elasticsearch源代码中提取了以下内容,供那些寻求深入了解上下文的人参考: } } if (indexAnalyzer == null) { if (searchAnalyzer != null) { throw new MapperParsingException("analyzer on completion field [" + name + "] must be set when search_analyzer is set"); } indexAnalyzer = searchAnalyzer = parserContext.getIndexAnalyzers().get("simple"); } else if (searchAnalyzer == null) { searchAnalyzer = indexAnalyzer; } " --- > **版本:** 6.8-7.9 简而言之,当在Elasticsearch的completion字段上设置了search_analyzer而没有设置analyzer时,会出现此错误。completion字段是Elasticsearch中的一种建议器(suggester)类型,它需要同时设置analyzer和search_analyzer才能正常工作。要解决此问题,如果不需要search_analyzer,可以将其删除;或者在completion字段上设置analyzer。analyzer会在索引之前处理文本,而search_analyzer会在搜索查询期间处理文本。 日志上下文 ----------- 日志 "analyzer on completion field [" + name + "] must be set when search_analyzer is set" 的类名是 [CompletionFieldMapper.java。](https://www.geeksforgeeks.org/java-lang-class-class-java-set-1/) 我们从Elasticsearch源代码中提取了以下内容,供那些寻求深入了解上下文的人参考: ```java } } if (indexAnalyzer == null) { if (searchAnalyzer != null) { throw new MapperParsingException("analyzer on completion field [" + name + "] must be set when search_analyzer is set"); } indexAnalyzer = searchAnalyzer = parserContext.getIndexAnalyzers().get("simple"); } else if (searchAnalyzer == null) { searchAnalyzer = indexAnalyzer; } ```