当前位置:   article > 正文

SpringBoot 使用ElasticsearchRestTemplate_springboot elasticsearchresttemplate

springboot elasticsearchresttemplate

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);
}
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/325748?site=
推荐阅读
相关标签
  

闽ICP备14008679号