本文共 3142 字,大约阅读时间需要 10 分钟。
要想让springboot自动启动时候自动创建mapping
package com.ljf.springboot.data.es.model;import org.springframework.data.annotation.Id;import org.springframework.data.elasticsearch.annotations.DateFormat;import org.springframework.data.elasticsearch.annotations.Document;import org.springframework.data.elasticsearch.annotations.Field;import org.springframework.data.elasticsearch.annotations.FieldType;import java.io.Serializable;/** * @className Book * @Description TODO * @Author admin * @Date 2019/4/24 17:11 * @Version 1.0 **/// SpringBoot启动时会自动创建映射,但要注意如果已经存在相同的index,必须先删除//@Document(indexName = "#{esMyConfig.indexName}",type="#{esMyConfig.typeName}")@Document(indexName = "book",type="bookentity")public class Book implements Serializable { @Id private String id; //@Field(type= FieldType.Text) private String title; //@Field(type= FieldType.Keyword) private String author; // @Field(format= DateFormat.custom,pattern = "yyyy-MM-dd HH:mm:ss",type= FieldType.Date) private String createDate; // @Field(type= FieldType.Long) private double price; // @Field(type= FieldType.Integer) private Integer age; public Book() { } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getCreateDate() { return createDate; } public void setCreateDate(String createDate) { this.createDate = createDate; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; }}
package com.ljf.springboot.data.es.repository;import com.ljf.springboot.data.es.model.Book;import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;import org.springframework.stereotype.Repository;import java.util.List;@Repositorypublic interface BookRepository extends ElasticsearchRepository{ List findByTitle(String title);}
这是因为在定义book实体时候,字段没有加注解:
@Id
private String id; //@Field(type= FieldType.Text) private String title; //@Field(type= FieldType.Keyword) private String author; // @Field(format= DateFormat.custom,pattern = "yyyy-MM-dd HH:mm:ss",type= FieldType.Date) private String createDate; // @Field(type= FieldType.Long) private double price; // @Field(type= FieldType.Integer) private Integer age;所以在springboot启动创建mapping时候创建了一个空mapping
4.添加一条数据:再查看mapping结构
执行添加数据请求:
新加的数据如下:
再次查看mapping结构:mapping已经有了数据结构,
结论:
spring-data-elastic:
1.映射实体类字段没有加注解
2.实体类添加了新的字段,
这两种情况,在保存数据的时候,会创建新的mapping,自动加上新的字段结构,形成新的mapping。
spring-data-elastic:实体类加了注解,springboot自启动时候,会创建具有相应字段的mapping结构,即mapping不为空。
转载地址:http://axtgi.baihongyu.com/