1、实体类
package elasticsearch.test.model;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
@Document( indexName = "trade" , type = "book")
public class Book {
//这里id名称任意,只要有@Id,对应的就是es的_id,注意两点
//1、如果没有此时不写getter,setter,那么在_source中是不包含id字段的
//2、如果设置了book.setId("1"),那么为_source和_id相等,都为1,记住这个1是字符串哦;如果让_source 的id为Number型,则可以设置属性为private Intger id,然后实体操作类的泛型必须为对应为Intger
@Id
private String id;
private String bookName;
private String author;
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
2、实体操作类
package elasticsearch.test.model;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public interface BookRepository extends ElasticsearchRepository<Book, String> {
//注意这里的<Book, String>右边的String,对应的就是实体的@Id,二者必须匹配,否则转换可能会出现null的情况
}
3、测试
public String index() {
Book book = new Book();
book.setBookName(String.valueOf(Math.random()));
book.setAuthor( "吴承恩" );
bookRepository.index( book );
return "elasticsearch";
}
生成结果文档
{
"_index": "trade",
"_type": "book",
"_id": "PrGQXXABITL0BdquSS4C",
"_version": 1,
"_score": 1,
"_source": {
"bookName": "0.19500748689777891",
"author": "吴承恩"
}
}
4、总结
- 如果
mysql等其他迁移到es的,那么一定有自增id,此时设置_id和_source中id相等 - 如果直接生成的
es的,则让es自动生成唯一识别串_id