You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Data Elasticsearch自定义分析器未加载,映射报错求助

问题描述

测试Elasticsearch自定义分析器时遇到异常,相关信息如下:

settings.json内容

{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_whitespace_analyzer": {
          "tokenizer": "whitespace"
        }
      }
    }
  }
}

索引实体类代码

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.*;

@Document(indexName = "employeedb", type="employeeDetails")
@Setting(settingPath = "/elasticsearch/settings.json")
public class EmployeeDetailsIndex {

    @Id
    @Field(type = FieldType.Keyword, name = "empId", store = true) //store will store the original empId as well as the analyzed one
    private String empId;


    @Field(type = FieldType.Keyword, name = "name", analyzer = "my_whitespace_analyzer", searchAnalyzer = "my_whitespace_analyzer")
    private String name;

//Getters and Setters
}

抛出的错误

failed to load elasticsearch nodes : org.elasticsearch.ElasticsearchStatusException: Elasticsearch exception [type=mapper_parsing_exception, reason=Mapping definition for [name] has unsupported parameters: [search_analyzer : my_whitespace_analyzer] [analyzer : my_whitespace_analyzer]]

使用版本

  • Java: 1.8.0
  • Elastic Search: 6.8.15
  • Spring Boot: 2.2.8.RELEASE
  • Spring-Data-Elasticsearch: 3.2.8.RELEASE

疑问:从错误来看settings.json似乎未被加载,已通过@Setting注解正确映射文件,参考教程均用此方式配置,请问可能的问题是什么?JSON格式是否有误?


问题分析与解决

1. JSON格式存在语法错误

你提供的settings.json末尾多了一个多余的闭合大括号},这会导致Elasticsearch无法正确解析配置文件,直接造成自定义分析器加载失败,修正后的JSON格式如上方代码所示。

2. Keyword类型字段不支持分词器配置

name字段被设置为FieldType.Keyword,而Keyword类型是不分词的,会将整个字符串作为单个关键词存储,因此不支持analyzer和searchAnalyzer参数,这是触发错误的直接原因。

如果需要对name字段使用自定义分词器,需将字段类型改为FieldType.Text:

@Field(type = FieldType.Text, name = "name", analyzer = "my_whitespace_analyzer", searchAnalyzer = "my_whitespace_analyzer")
private String name;

3. 已存在的索引未更新配置

如果之前已经创建过employeedb索引,Spring Data Elasticsearch默认不会覆盖已存在的索引配置。此时需要:

  • 删除已存在的employeedb索引,重启应用让框架自动创建带自定义分析器的索引
  • 或手动调用Elasticsearch API更新索引的settings和mapping

4. @Setting注解路径验证

确认settings.json文件位置是否正确:

  • 若注解路径为/elasticsearch/settings.json,文件需放在项目的src/main/resources/elasticsearch/目录下
  • 检查文件名和路径是否存在拼写、大小写错误(部分环境对文件名大小写敏感)

内容的提问来源于stack exchange,提问作者Something Nice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 23:43:20