Appearance
ElasticsearchOperations方式操作,就是常规的面向对象思想进行操作,使用起来非常简单。
核心概念回顾
- 索引:用来存放相似文档集合,类似MySQL中的数据库
- 映射:用来决定放入文档的每个字段以什么样方式录入到 ES 中 字段类型分词器,类似MySQL的表
- 文档:可以被索引最小单元 json 数据格式
类与文档映射
java
@Document(indexName = "products", createIndex = true)
public class Product {
@Id
private Integer id;
@Field(type = FieldType.Keyword)
private String title;
@Field(type = FieldType.Float)
private Double price;
@Field(type = FieldType.Text)
private String description;
//get set ...
}
解释说明
代码 | 含义 |
---|---|
@Document | 标注当前类是一个文档,indexName 是索引名称,createIndex 设置当索引不存在时自动创建 |
@Id | 设置该字段为文档Id |
@Field | 用来描述属性在ES中存储类型以及分词情况,type 用来指定字段类型,analyzer 指定该字段的分词器 |
Keyword | 此类型不会进行分词 |
Text | Text会进行分词,且可以通过analyzer 指定该字段的分词器 |
保存/更新文档
java
class ApplicationTests {
@Autowired
private ElasticsearchOperations elasticsearchOperations;
/**
* 索引一条文档,也就是保存,同时save方法也可用于更新
* id存在则为更新,id不存在则为保存,不设置id统一都是保存
*/
@Test
public void testIndex() {
Product product = new Product();
product.setId(1);
product.setTitle("小米13");
product.setPrice(4899.6);
product.setDescription("Xiaomi 联合徕卡深度研发,带来更具质感的专业影像,让你忘情地创作,记录美好一刻");
elasticsearchOperations.save(product);
}
}
删除文档
java
@Test
public void delete() {
Product product = new Product();
product.setId(1);
elasticsearchOperations.delete(product);
}
查询文档
java
@Test
public void testGet() {
Product product = elasticsearchOperations.get("1", Product.class);
System.out.println(product);
}
删除所有
java
@Test
public void testDeleteAll() {
elasticsearchOperations.delete(Query.findAll(), Product.class);
}
查询所有
java
@Test
public void testFindAll() {
SearchHits<Product> productSearchHits = elasticsearchOperations.search(Query.findAll(), Product.class);
productSearchHits.forEach(productSearchHit -> {
System.out.println("id: " + productSearchHit.getId());
System.out.println("score: " + productSearchHit.getScore());
Product product = productSearchHit.getContent();
System.out.println("product: " + product);
});
}