ElasticsearchOperations方式

2023-01-27 ElasticSearchSpringBoot

ElasticsearchOperations方式操作,就是常规的面向对象思想进行操作,使用起来非常简单。

# 核心概念回顾

  • 索引:用来存放相似文档集合,类似MySQL中的数据库
  • 映射:用来决定放入文档的每个字段以什么样方式录入到 ES 中 字段类型分词器,类似MySQL的表
  • 文档:可以被索引最小单元 json 数据格式

# 类与文档映射

@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指定该字段的分词器

# 保存/更新文档

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);
    }
}

# 删除文档

@Test
public void delete() {
    Product product = new Product();
    product.setId(1);
    elasticsearchOperations.delete(product);
}

# 查询文档

@Test
public void testGet() {
  Product product = elasticsearchOperations.get("1", Product.class);
  System.out.println(product);
}

# 删除所有

@Test
public void testDeleteAll() {
  elasticsearchOperations.delete(Query.findAll(), Product.class);
}

# 查询所有

@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);
    });
}
上次更新: 1 年前