Root mapping definition has unsupported parameters: [all : {analyzer=ik_max_wor

你们好,我是金金金。

场景

  • 我正在使用Springboot整合elasticsearch,在创建索引(分词器) 运行报错,如下

排查

排查之前我先贴一下代码

java 复制代码
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest; // 注意这个包


@SpringBootTest
public class RestHighLevelClientTest {
  // 当前客户端是手工维护的,因此不能通过自动装配的形式加载对象
  private RestHighLevelClient client;
  
  @BeforeEach
  void setUp() {
    HttpHost host = HttpHost.create("http://localhost:9200"); // 配置ES服务器地址与端口9200
    RestClientBuilder builder = RestClient.builder(host);
    client = new RestHighLevelClient(builder);
  }
  
  @AfterEach
  void tearDown() throws IOException {
    client.close();
  }
  
  @Test
  void testCreateIndexByIK() throws IOException {
    CreateIndexRequest request = new CreateIndexRequest("books");
    String json = "{\n" +
      "    \"mappings\": {\n" +
      "        \"properties\": {\n" +
      "            \"id\": {\n" +
      "                \"type\": \"keyword\"\n" +
      "            },\n" +
      "            \"name\": {\n" +
      "                \"type\": \"text\",\n" +
      "                \"analyzer\": \"ik_max_word\",\n" +
      "                \"copy_to\": \"all\"\n" +
      "            },\n" +
      "            \"type\": {\n" +
      "                \"type\": \"keyword\"\n" +
      "            },\n" +
      "            \"description\": {\n" +
      "                \"type\": \"text\",\n" +
      "                \"analyzer\": \"ik_max_word\",\n" +
      "                \"copy_to\": \"all\"\n" +
      "            },\n" +
     "            \"all\": {\n" +
      "                \"type\": \"text\",\n" +
      "                \"analyzer\": \"ik_max_word\"\n" +
      "            }\n" +
      "        }\n" +
      "    }\n" +
      "}";

    //设置请求中的参数
    request.source(json, XContentType.JSON);
    client.indices().create(request, RequestOptions.DEFAULT);
  }
}
  • 上面就是我的测试代码,很可惜它报错了。
  • 之前我在postman测试发送的请求参数没报错,所以我就很纳闷

所以我怀疑是不是在代码里面是不是写法不一样?当然我也在百度找到了方法,请看解决

造成error的原因

缺少参数导致识别不了(导入对包就没这个问题)

  • 我当前导入的CreateIndexRequest包是 import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;下的

解决

第一种解决方式 : 当导入的是import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;,在json请求参数里面需要加上一个type_name属性

可能不太建议这种方式,毕竟idea爆出了如下提示,还是用第二种方式吧

第二种解决方式 : 当然也可以不加 type_name也一样可以成功,导入import org.elasticsearch.client.indices.CreateIndexRequest;这个包下的CreateIndexRequest即可

  • 编写有误还请大佬指正,万分感谢。
相关推荐
IT学长编程1 小时前
计算机毕业设计 玩具租赁系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·课程设计·毕业论文·计算机毕业设计选题·玩具租赁系统
杨哥带你写代码1 小时前
足球青训俱乐部管理:Spring Boot技术驱动
java·spring boot·后端
A尘埃2 小时前
SpringBoot的数据访问
java·spring boot·后端
yang-23072 小时前
端口冲突的解决方案以及SpringBoot自动检测可用端口demo
java·spring boot·后端
代码之光_19802 小时前
SpringBoot校园资料分享平台:设计与实现
java·spring boot·后端
苹果醋33 小时前
快速玩转 Mixtral 8x7B MOE大模型!阿里云机器学习 PAI 推出最佳实践
spring boot·nginx·毕业设计·layui·课程设计
程序员大金3 小时前
基于SpringBoot+Vue+MySQL的装修公司管理系统
vue.js·spring boot·mysql
【D'accumulation】5 小时前
令牌主动失效机制范例(利用redis)注释分析
java·spring boot·redis·后端
2401_854391085 小时前
高效开发:SpringBoot网上租赁系统实现细节
java·spring boot·后端
wxin_VXbishe5 小时前
springboot合肥师范学院实习实训管理系统-计算机毕业设计源码31290
java·spring boot·python·spring·servlet·django·php