ElasticsearchRestTemplate工具类对ES 进行操作

网友投稿 413 2022-11-17

ElasticsearchRestTemplate工具类对ES 进行操作

SpringDataElasticsearch提供了一个工具类ElasticsearchRestTemplate,我们注入该类对象也能对ES进行操作。

1. 操作索引

package com.neu.springdataes;import com.neu.springdataes.model.Product;import com.neu.springdataes.model.Student;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;import org.springframework.data.elasticsearch.core.IndexOperations;/** * @Author yqq * @Date 2021/12/01 14:29 * @Version 1.0 */@SpringBootTestpublic class test1 { @Autowired private ElasticsearchRestTemplate template; @Test void t1(){ IndexOperations ops = template.indexOps(Student.class); ops.create(); } @Test void t2(){ IndexOperations ops = template.indexOps(Student.class); ops.delete(); } }

2.增删改文档

template操作文档的常用方法: save():新增/修改文档 delete():删除文档

@Test void t3(){ Product product = new Product(6,"小米","红米"); template.save(product); } @Test void t4(){ Product product = template.get("6", Product.class); System.out.println(product); } @Test void t5(){ template.delete("6",Product.class); }

3.查询文档

template的search方法可以查询文档: SearchHits search(Query query, Class clazz):查询文档,query是查询条件对象, clazz是结果类型。

普通查询:

@Test void t1(){ //构建查询条件// MatchAllQueryBuilder queryBuilder = QueryBuilders.matchAllQuery(); TermQueryBuilder queryBuilder = QueryBuilders.termQuery("desc","手机"); NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(queryBuilder).build(); //查询 SearchHits searchHits = template.search(query, Product.class); for (SearchHit hits:searchHits){ Product product = hits.getContent(); System.out.println(product); } }

复杂条件查询

@Test void t2(){ String name = "12"; String desc = "手机"; //构建查询条件 BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); if (name == null && desc == null){ MatchAllQueryBuilder queryBuilder = QueryBuilders.matchAllQuery(); boolQueryBuilder.must(queryBuilder); } else { if (name != null){ MatchQueryBuilder queryBuilder = QueryBuilders.matchQuery("name",name); boolQueryBuilder.must(queryBuilder); } if (desc != null){ MatchQueryBuilder queryBuilder = QueryBuilders.matchQuery("desc",desc); boolQueryBuilder.must(queryBuilder); } } NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).build(); SearchHits searchHits = template.search(query, Product.class); //输出查询结果 for (SearchHit hits:searchHits){ Product product = hits.getContent(); System.out.println(product); } }

分页查询

@Test void t3(){ //构建查询条件 MatchAllQueryBuilder queryBuilder = QueryBuilders.matchAllQuery(); //分页处理 Pageable pageable = PageRequest.of(0,3); NativeSearchQuery query = new NativeSearchQueryBuilder() .withQuery(queryBuilder) .withPageable(pageable) .build(); SearchHits searchHits = template.search(query, Product.class); //封装page对象 List content = new ArrayList<>(); for (SearchHit productSearchHit:searchHits) content.add(productSearchHit.getContent()); Page page = new PageImpl<>(content,pageable,searchHits.getTotalHits()); //输出分页对象 System.out.println(page.getTotalPages()); System.out.println(page.getContent()); System.out.println(page.getTotalElements()); }

结果排序

@Test void t4(){ //构建查询条件 MatchAllQueryBuilder queryBuilder = QueryBuilders.matchAllQuery(); //分页处理 Pageable pageable = PageRequest.of(0,3); //排序条件 FieldSortBuilder sortBuilder = SortBuilders.fieldSort("id").order(SortOrder.DESC); NativeSearchQuery query = new NativeSearchQueryBuilder() .withQuery(queryBuilder) .withPageable(pageable) .withSort(sortBuilder) .build(); SearchHits searchHits = template.search(query, Product.class); //封装page对象 List content = new ArrayList<>(); for (SearchHit productSearchHit:searchHits) content.add(productSearchHit.getContent()); Page page = new PageImpl<>(content,pageable,searchHits.getTotalHits()); //输出分页对象 System.out.println(page.getTotalPages()); for (Product product:page.getContent()) System.out.println(product); System.out.println(page.getTotalElements()); }

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:iphone7砍掉耳机接口 iPhone8砍掉充电接口 iPhone9你还想砍掉啥?
下一篇:Elasticsearch全文检索服务器介绍
相关文章

 发表评论

暂时没有评论,来抢沙发吧~