赞
踩
1.pom.xml添加
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> <version>2.6.2</version> </dependency>
2.配置文件配置地址
spring: data: elasticsearch: cluster-name: elasticsearch cluster-nodes: localhost:9200
3.开始使用
3.0.创建实体类
@Data @AllArgsConstructor @NoArgsConstructor @Document(indexName = "book") public class Book { @Id private String id; private String title; private Integer price; private String info; }
@Autowired private ElasticsearchRestTemplate elasticsearchRestTemplate;
3.1.创建索引
public Result createIndex() { IndexOperations indexOperations = elasticsearchRestTemplate.indexOps(Book.class); //创建索引 boolean a = indexOperations.create(); if (a) { //生成映射 Document document = indexOperations.createMapping(); //推送映射 return Result.success(indexOperations.putMapping(document)); } else { return Result.success(a); } }
3.2.添加数据
public Result addIndex() { for (int i = 0; i < 10; i++) { Book book=new Book(); book.setTitle("标题"+i+1); book.setPrice(i); book.setInfo(RandomUtil.randomString("赵钱孙李",6)); elasticsearchRestTemplate.save(book); } return Result.success(1); }
3.3.修改数据
public Result updateIndex(@RequestBody JSONObject param) { Document document=Document.create(); document.put("price",param.getInteger("price")); return Result.success(elasticsearchRestTemplate.update(UpdateQuery.builder(param.getString("id")).withDocument(document).build(), IndexCoordinates.of("book"))); }
3.4.模糊查询
public Result getIndexLikeData(@RequestBody JSONObject param) { List<Book>list=new ArrayList<>(); NativeSearchQuery query=new NativeSearchQuery(QueryBuilders.queryStringQuery(param.getString("id"))); for (SearchHit<Book> searchHits:elasticsearchRestTemplate.search(query,Book.class)) { System.out.println(searchHits.getContent()); list.add(searchHits.getContent()); } return Result.success(list); }
3.5.分页查找
public Result getIndexDataPage() { List<Book>list=new ArrayList<>(); NativeSearchQuery query=new NativeSearchQuery(QueryBuilders.matchAllQuery()); query.setPageable(PageRequest.of(0,3, Sort.by(Sort.Direction.ASC,"price"))); for (SearchHit<Book> searchHits:elasticsearchRestTemplate.search(query,Book.class)) { list.add(searchHits.getContent()); } return Result.success(list); }
3.6.高亮查找
public Result getHighLight(@RequestBody JSONObject param) { List<Book>list=new ArrayList<>(); MatchQueryBuilder matchQueryBuilder=QueryBuilders.matchQuery("info",param.getString("keyWord")); NativeSearchQuery query=new NativeSearchQueryBuilder().withQuery(matchQueryBuilder) .withHighlightFields(new HighlightBuilder.Field("info")) .withHighlightBuilder(new HighlightBuilder().preTags("<span style='color:red'>").postTags("<span>")) .build(); SearchHits<Book> searchHit= elasticsearchRestTemplate.search(query,Book.class); List<SearchHit<Book>>searchHits=searchHit.getSearchHits(); for (SearchHit<Book> hit : searchHits) { Map<String, List<String>>files=hit.getHighlightFields(); hit.getContent().setInfo(files.get("info")==null?hit.getContent().getInfo(): files.get("info").get(0)); list.add(hit.getContent()); } return Result.success(list); }
3.7.聚合操作
public Result getAggData() { NativeSearchQuery query=new NativeSearchQuery(QueryBuilders.matchAllQuery()); TermsAggregationBuilder builder = AggregationBuilders.terms("price").field("price").size(9999); query.addAggregation(builder); SearchHits<Book> searchHit= elasticsearchRestTemplate.search(query,Book.class); Aggregations aggregations= (Aggregations) Objects.requireNonNull(searchHit.getAggregations()).aggregations(); Map<String, Aggregation> results = aggregations.asMap(); ParsedLongTerms stringTerms= (ParsedLongTerms) results.get("price"); Map<String,Long> nameCountMap = stringTerms.getBuckets() .stream() .collect(Collectors.toMap( Terms.Bucket::getKeyAsString, Terms.Bucket::getDocCount) ); return Result.success(nameCountMap); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。