蘇州網(wǎng)站建設(shè)開發(fā)網(wǎng)絡(luò)推廣方法大全
目錄
前言
Procuct實(shí)體類
一、操作索引
二、操作文檔
三、查詢文檔
四、復(fù)雜條件查詢
五、分頁(yè)查詢
六、結(jié)果排序
本文文章介紹的是通過(guò)template的方法操作elasticsearch,他的話直接本地注入使用就行,repository方法還需要實(shí)現(xiàn)接口,所以我個(gè)人喜歡template(他還支持復(fù)雜查詢嘞!)
前言
Procuct實(shí)體類
@Document(indexName = "product",createIndex = true)
@Data
@AllArgsConstructor
public class Product {@Id@Field(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() {// 獲得索引操作對(duì)象IndexOperations indexOperations = template.indexOps(Product.class);// 創(chuàng)建索引,注:該方法無(wú)法設(shè)置索引結(jié)構(gòu),不推薦使用indexOperations.create();}// 刪除索引@Testpublic void delIndex() {// 獲得索引操作對(duì)象IndexOperations indexOperations = template.indexOps(Product.class);// 刪除索引indexOperations.delete();}
}
不過(guò)一般我們創(chuàng)建索引在實(shí)體類創(chuàng)建時(shí)就創(chuàng)建或者是在kibna中自己創(chuàng)建就行!
二、操作文檔
// 新增/修改文檔
@Test
public void addDocument() {Product product = new Product(7, "es1", "es是一款優(yōu)秀的搜索引擎");template.save(product);
}// 刪除文檔
@Test
public void delDocument() {template.delete("7", Product.class);
}// 根據(jù)id查詢
@Test
public void findAllDocument() {Product product = template.get("1", Product.class);System.out.println(product);
}
三、查詢文檔
template的search方法可以查詢文檔
SearchHits<T> search(Query query, Class<T> clazz):查詢文檔,query是查詢條件對(duì)象,clazz是結(jié)果類型。
// 查詢文檔2
@Test
public void searchDocument2() {String productName = "三體";String productDesc = "優(yōu)秀";// 1.構(gòu)建查詢條件NativeQuery query=new NativeQueryBuilder().withQuery(Queries.matchAllQueryAsQuery()).build();// 2.查詢SearchHits<Product> result = template.search(query, Product.class);// 3.處理查詢結(jié)果for (SearchHit<Product> productSearchHit : result) {Product product = productSearchHit.getContent();System.out.println(product);}
}
四、復(fù)雜條件查詢
// 復(fù)雜查詢
@Test
public void searchDocument2(){String productName = "三體";String productDesc = "優(yōu)秀";// 1.構(gòu)造查詢條件NativeQueryBuilder nativeQueryBuilder = new NativeQueryBuilder();// 如果沒有傳入?yún)?shù),查詢所有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.查詢SearchHits<Product> result = template.search(query, Product.class);// 3.處理查詢結(jié)果for (SearchHit<Product> productSearchHit : result) {Product product = productSearchHit.getContent();System.out.println(product);}
}
五、分頁(yè)查詢
// 分頁(yè)查詢文檔
@Test
public void searchDocumentPage() {// 1.構(gòu)建查詢條件Pageable pageable = PageRequest.of(0, 3);NativeQuery query = new NativeQueryBuilder().withQuery(Queries.matchAllQueryAsQuery()).withPageable(pageable).build();// 2.查詢SearchHits<Product> result = template.search(query, Product.class);// 3.處理查詢結(jié)果List<Product> content = new ArrayList();for (SearchHit<Product> productSearchHit : result) {Product product = productSearchHit.getContent();content.add(product);}/*** 封裝Page對(duì)象,參數(shù)1:具體數(shù)據(jù),參數(shù)2:分頁(yè)條件對(duì)象,參數(shù)3:總條數(shù)*/Page<Product> page = new PageImpl(content, pageable, result.getTotalHits());System.out.println(page.getTotalElements());System.out.println(page.getTotalPages());System.out.println(page.getContent());
}
六、結(jié)果排序
// 結(jié)果排序
@Test
public void searchDocumentSort() {// 1.構(gòu)建查詢條件NativeQuery query = new NativeQueryBuilder().withQuery(Queries.matchAllQueryAsQuery()).withSort(Sort.by(Sort.Direction.DESC, "id")).build();// 2.查詢SearchHits<Product> result = template.search(query, Product.class);// 3.處理查詢結(jié)果for (SearchHit<Product> productSearchHit : result) {Product product = productSearchHit.getContent();System.out.println(product);}
}