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);
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,Spring Boot可以使用ElasticsearchRestTemplateElasticsearch进行交互。以下是一些基本步骤: 1. 添加依赖 在pom.xml中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 2. 配置连接信息 在application.properties中添加Elasticsearch的连接信息: ```properties spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300 spring.data.elasticsearch.cluster-name=my-application ``` 3. 创建ElasticsearchRestTemplate Bean 创建一个ElasticsearchRestTemplate的Bean,用于与Elasticsearch进行交互: ```java @Configuration public class ElasticsearchConfig { @Value("${spring.data.elasticsearch.cluster-nodes}") private String clusterNodes; @Value("${spring.data.elasticsearch.cluster-name}") private String clusterName; @Bean public RestHighLevelClient client() { ClientConfiguration clientConfiguration = ClientConfiguration.builder() .connectedTo(clusterNodes) .build(); return RestClients.create(clientConfiguration).rest(); } @Bean public ElasticsearchRestTemplate elasticsearchRestTemplate() { return new ElasticsearchRestTemplate(client()); } } ``` 4. 使用ElasticsearchRestTemplate 现在你可以使用ElasticsearchRestTemplateElasticsearch进行交互,例如: ```java @Autowired private ElasticsearchRestTemplate elasticsearchRestTemplate; public void indexDocument(String indexName, Object document) { IndexQueryBuilder indexQueryBuilder = new IndexQueryBuilder().withObject(document); IndexCoordinates indexCoordinates = IndexCoordinates.of(indexName); String documentId = elasticsearchRestTemplate.index(indexQueryBuilder, indexCoordinates); } ``` 这里的elasticsearchRestTemplate是在配置文件中创建的ElasticsearchRestTemplate Bean。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值