Spring Data ElasticSearch analyzer 定义 @Filed失效 @Mapping失效 创建索引 无效 解决办法 ElasticsearchRestTemplate

ES版本 7.x

首先上失效原因

  • SpringDataElasticsearch版本变动频繁,很多网上的代码失效,有很多方法标记为过时
  • ElasticsearchRestTemplate不读@Filed注解,所以你在@Field里面写再多代码也没用,以下代码为错误示例
    @Field(analyzer = "ik_smart", type = FieldType.Text)
    private String commentText;
  • ElasticsearchRestTemplate在创建索引的时候不读@Mapping,也就是需要两步才能创建完整的索引 1、创建索引  2、更新字段mapping
  • ElasticsearchRestTemplate 创建的索引名只读@Document注解,所以必须包含@Document注解,以下代码为错误示例

@Mapping(mappingPath="mapper/document.json")
@Data
public class MyDocument {
    @Id
    private String id;
    private String title;
}



//创建目标索引代码 
restTemplate.indexOps(VideoDocument.class).create();

  •  Mapping.json内,直接说明属性即可,不需要mapping包裹,以下代码为错误示例
{
  "mapping":{
      "properties": {
           "id": {
              "type": "text"
            },
            "title": {
              "type": "text",
              "analyzer": "ik_smart",
              "search_analyzer": "whitespace"
            }
      }
  }
}

原因是源码里,直接将此json作为更新索引请求体,所以es语法怎么定义就怎么写,不是spring 定义的格式

正确写法:

1、需要@Document注解
2、添加Mapping注解,自己创建一个json文件用来定义字段类型

3、创建索引后需要putMapping,更新字段属性,此时才会读Mapping里面定义的json

4、json文件内为 es更新索引的请求体,直接以properties开头

//Document类定义
@Document(indexName = "video")
@Mapping(mappingPath="mapper/myDocument.json")
public class MyDocument{

    @Id
    private String id;

    private String title;
}


//创建索引 可以指定在postconstruct内
if (!restTemplate.indexOps(MyDocument.class).exists()) {
  restTemplate.indexOps(MyDocument.class).create();
  restTemplate.indexOps(MyDocument.class).putMapping();
}
{
    "properties": {
         "id": {
            "type": "text"
          },
          "title": {
              "type": "text",
              "analyzer": "ik_smart",
              "search_analyzer": "whitespace"
          }
    }
  
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值