当前位置:   article > 正文

SpringBoot整合ElasticSearch8_springboot 结合elasticsearch8

springboot 结合elasticsearch8

        SpringBoot整合ES有两种方案,ES官方提供的Elasticsearch Java API Client [8.12] | Elastic和Spring官网提供的Spring Data Elasticsearch

​​​        两种方案各有优劣:

Spring:高度封装,用着比较舒服。缺点是更新不及时,有可能无法使用ES新的API

ES官方:更新即使,灵活,缺点是太灵活了,基本是一比一复制REST APIS,项目中使用需要二次封装。

        集成:在pom.xml中添加

<dependency>

        <groupId>co.elastic.clients</groupId>

        <artifactId>elasticsearch-java</artifactId>

        <version>8.12.2</version>

</dependency>

<!-- 如果有添加springmvc,此包可不引入 -->

<dependency>

         <groupId>com.fasterxml.jackson.core</groupId>

        <artifactId>jackson-databind</artifactId>

         <version>2.12.3</version>

 </dependency>

如果报错 ClassNotFoundException: jakarta.json.spi.JsonProvider,则还需要添加

<dependency>

         <groupId>jakarta.json</groupId>

        <artifactId>jakarta.json-api</artifactId>

         <version>2.0.1</version>

</dependency>

打印请求:

在application.yml中添加配置,打印 es 的 http 请求(建议在开发调试时使用)

logging:

  level:

    tracer: TRACE

连接ES:

@Configuration

public class ElasticSearchConfig {

        @Bean

         public ElasticsearchClient esClient() {

                 // ES服务器URL String serverUrl = "http://127.0.0.1:9200";

                // ES用户名和密码 String userName = "xxx";

                String password = "xxx";

                BasicCredentialsProvider credsProv = new BasicCredentialsProvider();                 credsProv.setCredentials( AuthScope.ANY, new                         UsernamePasswordCredentials(userName, password) );

                RestClient restClient = RestClient .builder(HttpHost.create(serverUrl))                         .setHttpClientConfigCallback(hc -> hc.setDefaultCredentialsProvider(credsProv))                         .build();

                ElasticsearchTransport transport = new RestClientTransport(restClient, new                         JacksonJsonpMapper());

                return new ElasticsearchClient(transport);

        } 

}

索引操作:

代码中的ESClient就是Elasticsearch,请自行注入bean

// 索引名字

String indexName = "book";

// 索引是否存在

BooleanResponse books = esClient.indices().exists(e -> e.index(indexName)); System.out.println("索引是否存在:" + books.value());

// 创建索引

esClient.indices().create(c -> c .index(indexName) .mappings(mappings -> mappings

 .properties("name", p -> p .text(t -> t ,index=false .index(false) ) ) .properties("age", p -> p .long_(t -> t) // long类型 ) ) );

// 删除索引

esClient.indices().delete(d -> d.index(indexName));

搜索:

// 搜索全部

SearchResponse<Account> searchResp = esClient.search(s -> s .index(indexName) .query(q -> q.matchAll(m -> m)) , Account.class );

HitsMetadata<Account> hits = searchResp.hits();

long totalValue = hits.total().value();

// 匹配到的数量

hits.hits().forEach(h -> {

        Account acc = h.source();  // 这就是得到的实体类

        acc.setId(h.id());

});

本文介绍了SpringBoot整合Elasticsearch的集成方案,但只是简单提及,更详细的方法需要自行查看官方文档。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/936341
推荐阅读
相关标签
  

闽ICP备14008679号