私人做网站a,做网站 钱,祖庙网站建设,深圳市中心在哪个位置目录
前言
Procuct实体类
一、操作索引
二、操作文档
三、查询文档
四、复杂条件查询
五、分页查询
六、结果排序 本文文章介绍的是通过template的方法操作elasticsearch#xff0c;他的话直接本地注入使用就行#xff0c;repository方法还需要实现接口#xff0c;所…目录
前言
Procuct实体类
一、操作索引
二、操作文档
三、查询文档
四、复杂条件查询
五、分页查询
六、结果排序 本文文章介绍的是通过template的方法操作elasticsearch他的话直接本地注入使用就行repository方法还需要实现接口所以我个人喜欢template他还支持复杂查询嘞 前言
Procuct实体类
Document(indexName product,createIndex true)
Data
AllArgsConstructor
public class Product {IdField(type FieldType.Integer,store true,index true)private Integer id;Field(type FieldType.Text,store true,index true,analyzer ik_max_word,searchAnalyzer ik_max_word)private String productName;Field(type FieldType.Text,store true,index true,analyzer ik_max_word,searchAnalyzer ik_max_word)private String productDesc;
}一、操作索引
SpringBootTest
public class TemplateTest {Autowiredprivate ElasticsearchTemplate template;// 新增索引Testpublic void addIndex() {// 获得索引操作对象IndexOperations indexOperations template.indexOps(Product.class);// 创建索引,注该方法无法设置索引结构不推荐使用indexOperations.create();}// 删除索引Testpublic void delIndex() {// 获得索引操作对象IndexOperations indexOperations template.indexOps(Product.class);// 删除索引indexOperations.delete();}
}不过一般我们创建索引在实体类创建时就创建或者是在kibna中自己创建就行 二、操作文档
// 新增/修改文档
Test
public void addDocument() {Product product new Product(7, es1, es是一款优秀的搜索引擎);template.save(product);
}// 删除文档
Test
public void delDocument() {template.delete(7, Product.class);
}// 根据id查询
Test
public void findAllDocument() {Product product template.get(1, Product.class);System.out.println(product);
}三、查询文档 template的search方法可以查询文档 SearchHitsT search(Query query, ClassT clazz)查询文档query是查询条件对象clazz是结果类型。// 查询文档2
Test
public void searchDocument2() {String productName 三体;String productDesc 优秀;// 1.构建查询条件NativeQuery querynew NativeQueryBuilder().withQuery(Queries.matchAllQueryAsQuery()).build();// 2.查询SearchHitsProduct result template.search(query, Product.class);// 3.处理查询结果for (SearchHitProduct productSearchHit : result) {Product product productSearchHit.getContent();System.out.println(product);}
}四、复杂条件查询
// 复杂查询
Test
public void searchDocument2(){String productName 三体;String productDesc 优秀;// 1.构造查询条件NativeQueryBuilder nativeQueryBuilder new NativeQueryBuilder();// 如果没有传入参数查询所有if (productName null productDesc null){nativeQueryBuilder.withQuery(Queries.matchAllQueryAsQuery());}else {BoolQuery.Builder boolQuery QueryBuilders.bool();if (productName ! null){boolQuery.must(Queries.matchQueryAsQuery(productName,productName,null,null));}if (productDesc ! null){boolQuery.must(Queries.matchQueryAsQuery(productDesc,productDesc,null,null));}nativeQueryBuilder.withQuery(boolQuery.build()._toQuery());}NativeQuery query nativeQueryBuilder.build();// 2.查询SearchHitsProduct result template.search(query, Product.class);// 3.处理查询结果for (SearchHitProduct productSearchHit : result) {Product product productSearchHit.getContent();System.out.println(product);}
}五、分页查询
// 分页查询文档
Test
public void searchDocumentPage() {// 1.构建查询条件Pageable pageable PageRequest.of(0, 3);NativeQuery query new NativeQueryBuilder().withQuery(Queries.matchAllQueryAsQuery()).withPageable(pageable).build();// 2.查询SearchHitsProduct result template.search(query, Product.class);// 3.处理查询结果ListProduct content new ArrayList();for (SearchHitProduct productSearchHit : result) {Product product productSearchHit.getContent();content.add(product);}/*** 封装Page对象参数1具体数据参数2分页条件对象参数3总条数*/PageProduct page new PageImpl(content, pageable, result.getTotalHits());System.out.println(page.getTotalElements());System.out.println(page.getTotalPages());System.out.println(page.getContent());
}六、结果排序
// 结果排序
Test
public void searchDocumentSort() {// 1.构建查询条件NativeQuery query new NativeQueryBuilder().withQuery(Queries.matchAllQueryAsQuery()).withSort(Sort.by(Sort.Direction.DESC, id)).build();// 2.查询SearchHitsProduct result template.search(query, Product.class);// 3.处理查询结果for (SearchHitProduct productSearchHit : result) {Product product productSearchHit.getContent();System.out.println(product);}
}