Elasticsearch(二)集成Spring Boot 基本的API操作

目录

一、集成Spring Boot

 1、创建项目

2、pom文件 查看springboot集成的依赖

3、增加es的config类

二、索引相关API

1、创建索引

2、获取索引,判断其是否存在

3、删除索引

三、文档相关API

1、添加文档

2、获取文档,判断是否存在

3、获取文档信息

4、更新文档信息

5、删除文档信息

6、同文档批量导入数据

7、条件查询文档信息


一、集成Spring Boot

Java使用对应的rest风格调用ES是通过client依赖包进行操作的

配置需要的 maven 依赖

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.17.24</version>
</dependency>

 1、创建项目

如果创建项目后拉取不到对应依赖,springboot 可以选用低一些的稳定版本例如 2.3.2.RELEASE 版本

2、pom文件 查看springboot集成的依赖

(当然也可自定义ES版本)

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

3、增加es的config类

package com.example.elasticsearch_springboot_demo.config;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ElasticSearchClientConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost", 9200, "http"),
                        new HttpHost("localhost", 9201, "http")));
        return client;
    }
}

二、索引相关API

1、创建索引

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {

    @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;

    /**
     * 【索引相关】索引创建
     */
    @Test
    void testCreateIndex() throws IOException {
        // 1、创建索引请求
        CreateIndexRequest request = new CreateIndexRequest("m_index");
        // 2、客户端执行请求 IndicesClient,执行创建请求 并获得响应结果
        CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT
<think> 我们正在处理用户的问题:“我想查找spring boot集成Elasticsearch Java API的方法 请问spring boot集成Elasticsearch Java API的实现方法” 根据系统指令,我们需要使用中文回答,并且注意LaTeX格式。同时,我们需要生成相关问题。 根据用户上一次的问题和当前问题,用户明确要求Spring Boot集成Elasticsearch Java API的实现方法。 注意:用户提供了三个引用,但引用内容与用户当前问题关联性不强。引用[1]指向Elasticsearch Java API客户端官方文档,引用[2]提到使用Java API进行索引操作和查询,引用[3]介绍了Elasticsearch基本概念和生态。但用户需要的是Spring Boot集成方法。 然而,根据我们的知识,Spring Boot集成Elasticsearch通常有两种方式: 1. 使用Spring Data Elasticsearch(这是Spring官方提供的,简化操作) 2. 直接使用Elasticsearch提供的Java API客户端(即High Level REST Client的替代品,官方推荐) 由于用户特别提到“Java API”,可能指的是Elasticsearch官方Java客户端(即新的Java API Client),而不是Spring Data Elasticsearch。但Spring Boot通常与Spring Data Elasticsearch集成更常见。 因此,我们需要明确: 用户想要的是通过Spring Boot集成Elasticsearch官方的Java API Client,还是使用Spring Data Elasticsearch? 但是,根据引用[1]中提到的“Elasticsearch Java API Client”的官方链接,以及引用[2]中提到的“Java API”,用户可能更倾向于使用官方的Java API Client。 然而,Spring BootElasticsearch集成默认是通过Spring Data Elasticsearch来实现的,而Spring Data Elasticsearch底层可以使用不同的客户端,包括TransportClient(已弃用)、High Level Rest Client(已弃用)以及新的Java API Client(官方推荐)。 目前(2023年),Spring Boot 3.x版本中,Spring Data Elasticsearch 5.x版本已经支持Elasticsearch的Java API Client(从Spring Data Elasticsearch 4.4开始支持,但需要Spring Boot 2.7以上,而Spring Boot 3.x对应Spring Data Elasticsearch 5.x)。 因此,我们可以提供两种集成方式,但更推荐使用Spring Data Elasticsearch的方式,因为它是Spring生态的一部分,可以充分利用Spring Boot的自动配置。 不过,如果用户明确要求使用Elasticsearch Java API Client(非Spring Data封装),我们也可以提供直接集成的方法。 考虑到用户问题中同时出现了“Spring Boot”和“Elasticsearch Java API”,我们决定提供两种方法: 方法一:使用Spring Data Elasticsearch(推荐,因为与Spring Boot集成更简单) 方法:直接使用Elasticsearch Java API Client(需要手动配置) 由于用户没有明确指定,我们将分别介绍两种方法的基本步骤。 注意:在回答中,我们会引用用户提供的引用,但用户提供的引用中并没有直接给出集成方法,因此我们将主要依靠自己的知识库。 但是,引用[1]的链接是官方Java API Client的文档,我们可以将其作为参考链接。 步骤: 方法一:使用Spring Data Elasticsearch 1. 添加依赖(以Maven为例,Spring Boot 3.x): - spring-boot-starter-data-elasticsearch 2. 配置Elasticsearch连接信息(application.properties): spring.elasticsearch.uris=http://localhost:9200 3. 创建实体类,使用@Document注解映射索引 4. 创建Repository接口,继承ElasticsearchRepository 方法:直接使用Elasticsearch Java API Client 1. 添加依赖(Maven): <dependency> <groupId>co.elastic.clients</groupId> <artifactId>elasticsearch-java</artifactId> <version>8.11.4</version> <!-- 版本需与Elasticsearch服务器版本一致 --> </dependency> <!-- 还需要添加jackson依赖,因为Java API Client使用Jackson进行JSON序列化 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency> 2. 创建配置类,初始化ElasticsearchClient: @Configuration public class ElasticsearchConfig { @Value("${spring.elasticsearch.uris}") private String[] uris; @Bean public ElasticsearchClient elasticsearchClient() { // 创建低级客户端 RestClient restClient = RestClient.builder(HttpHost.create(uris[0])).build(); ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper()); return new ElasticsearchClient(transport); } } 3. 在需要的地方注入ElasticsearchClient,使用其API进行操作。 注意:方法中,我们使用了Spring Boot的配置属性,所以需要在application.properties中配置spring.elasticsearch.uris。 由于用户要求的是实现方法,我们将按步骤详细说明。 另外,我们还需要生成相关问题。 因此,回答结构如下: 回答: 在Spring Boot集成Elasticsearch Java API主要有两种方式:使用Spring Data Elasticsearch(推荐)和直接使用Elasticsearch Java API Client。下面分别介绍这两种方法。 ### 方法一:使用Spring Data Elasticsearch(推荐) Spring Data ElasticsearchSpring官方提供的模块,与Spring Boot集成度高,可以简化操作。 1. **添加依赖** 在`pom.xml`中添加以下依赖(以Spring Boot 3.x为例): ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 2. **配置连接信息** 在`application.properties`中配置Elasticsearch地址: ```properties spring.elasticsearch.uris=http://localhost:9200 ``` 3. **创建实体类映射索引** 使用`@Document`注解标记实体类,指定索引名: ```java @Document(indexName = "products") public class Product { @Id private String id; private String name; private double price; // 省略getter和setter } ``` 4. **创建Repository接口** 创建接口继承`ElasticsearchRepository`: ```java public interface ProductRepository extends ElasticsearchRepository<Product, String> { // 可以自定义查询方法 } ``` 5. **使用Repository操作数据** 在Service中注入Repository,进行CRUD操作: ```java @Service public class ProductService { @Autowired private ProductRepository productRepository; public void saveProduct(Product product) { productRepository.save(product); } // 其他方法 } ``` 更多Spring Data Elasticsearch用法可参考[官方文档](https://spring.io/projects/spring-data-elasticsearch)。 ### 方法:直接使用Elasticsearch Java API Client 如果你需要更直接地使用Elasticsearch官方API,可以手动集成Elasticsearch Java API Client。 1. **添加依赖** 在`pom.xml`中添加以下依赖(注意版本需与Elasticsearch服务器版本匹配): ```xml <dependency> <groupId>co.elastic.clients</groupId> <artifactId>elasticsearch-java</artifactId> <version>8.11.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency> ``` 2. **创建配置类初始化ElasticsearchClient** ```java @Configuration public class ElasticsearchConfig { @Value("${spring.elasticsearch.uris}") private String[] uris; @Bean public ElasticsearchClient elasticsearchClient() { // 创建低级客户端 RestClient restClient = RestClient.builder(HttpHost.create(uris[0])).build(); // 使用Jackson映射器创建传输层 ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper()); // 创建API客户端 return new ElasticsearchClient(transport); } } ``` 3. **使用ElasticsearchClient执行操作** 例如,索引一个文档: ```java @Service public class ProductService { @Autowired private ElasticsearchClient client; public void indexProduct(Product product) throws IOException { IndexRequest<Product> request = IndexRequest.of(b -> b .index("products") .id(product.getId()) .document(product) ); client.index(request); } } ``` 以上两种方法均可实现Spring BootElasticsearch集成。推荐使用Spring Data Elasticsearch,因为它与Spring Boot的整合更紧密,开发效率更高。如果对Elasticsearch原生API有特别需求,可以选择直接使用Java API Client。 §§相关问题§§ 1. Spring Data ElasticsearchElasticsearch Java API Client 有什么区别? 2. 在 Spring Boot 中如何配置 Elasticsearch 的认证信息? 3. 如何通过 Spring Boot 实现 Elasticsearch 的复杂查询? </think> ### Spring Boot集成Elasticsearch Java API的实现方法 在Spring Boot集成Elasticsearch Java API主要有两种方式,下面详细介绍具体实现步骤: #### 方法一:使用Spring Data Elasticsearch(推荐) 这是Spring官方提供的集成方案,简化了操作流程: 1. **添加依赖** 在`pom.xml`中添加: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 2. **配置连接信息** 在`application.properties`中: ```properties spring.elasticsearch.uris=http://localhost:9200 # 如需认证 spring.elasticsearch.username=admin spring.elasticsearch.password=123456 ``` 3. **创建实体映射** ```java @Document(indexName = "products") public class Product { @Id private String id; @Field(type = FieldType.Text) private String name; @Field(type = FieldType.Double) private double price; // 省略getter/setter } ``` 4. **定义Repository接口** ```java public interface ProductRepository extends ElasticsearchRepository<Product, String> { List<Product> findByName(String name); // 自动实现查询 } ``` 5. **使用示例** ```java @Service public class ProductService { @Autowired private ProductRepository repository; public void saveProduct(Product product) { repository.save(product); // 自动同步到ES } } ``` #### 方法:直接集成Elasticsearch Java API Client 适合需要直接操作原生API的场景: 1. **添加官方客户端依赖** ```xml <dependency> <groupId>co.elastic.clients</groupId> <artifactId>elasticsearch-java</artifactId> <version>8.11.4</version> <!-- 需匹配ES版本 --> </dependency> ``` 2. **创建配置类** ```java @Configuration public class EsConfig { @Value("${elasticsearch.host}") private String host; @Bean public ElasticsearchClient elasticsearchClient() { RestClient restClient = RestClient.builder( new HttpHost(host, 9200) ).build(); ElasticsearchTransport transport = new RestClientTransport( restClient, new JacksonJsonpMapper() ); return new ElasticsearchClient(transport); } } ``` 3. **索引文档示例** ```java @Service public class DocService { @Autowired private ElasticsearchClient client; public void indexDocument(String index, Product product) throws IOException { client.index(b -> b .index(index) .id(product.getId()) .document(product) ); } } ``` ### 关键注意事项 1. **版本兼容性** Spring Boot/Spring Data版本需与Elasticsearch版本匹配([官方兼容矩阵](https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#preface.versions)) 2. **连接池配置**(适用于高并发) ```properties spring.elasticsearch.connection-timeout=3s spring.elasticsearch.socket-timeout=5s spring.elasticsearch.max-connections=100 ``` 3. **生产环境建议** - 使用HTTPS和SSL证书 - 启用集群节点发现 - 配置重试策略和超时机制[^1] > **两种方式对比**: > - Spring Data方案:开发快,适合CRUD场景 > - Java API Client:灵活性强,适合复杂查询和定制操作 > 官方推荐新项目优先使用Java API Client[^1]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值