Java 如何集成 Elasticsearch呢?

欣喜 Spring 发布时间:2025-03-18 16:27:08 阅读数:4847 1
下文笔者讲述java中集成Elasticsearch的方法及示例分享,如下所示
java中集成Elasticsearch
  我们可使用
    客户端库`elasticsearch-rest-high-level-client`
	   或 
	         `elasticsearch-rest-client`
例:

1.添加依赖

使用 Maven
   在`pom.xml` 文件中添加以下依赖:

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.17.0</version> <!-- 请根据您的 Elasticsearch 版本调整 -->
</dependency>
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>7.17.0</version> <!-- 请根据您的 Elasticsearch 版本调整 -->
</dependency>
 
或 
 Gradle

在 `build.gradle` 文件中添加以下依赖:
 dependencies {
    implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.17.0' // 请根据您的 Elasticsearch 版本调整
    implementation 'org.elasticsearch:elasticsearch:7.17.0' // 请根据您的 Elasticsearch 版本调整
}

2.配置Elasticsearch客户端

创建一个配置类来初始化 Elasticsearch 客户端。

例
  使用`RestHighLevelClient`
 
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;

public class ElasticsearchConfig {
    private static final String HOST = "localhost";
    private static final int PORT = 9200;
    private static final String SCHEME = "http";

    private static RestHighLevelClient client;

    public static RestHighLevelClient getClient() {
        if (client == null) {
            client = new RestHighLevelClient(
                    RestClient.builder(
                            new HttpHost(HOST, PORT, SCHEME)
                    )
            );
        }
        return client;
    }

    public static void closeClient() {
        if (client != null) {
            try {
                client.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

3.编写基本CRUD操作

import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class ElasticsearchExample {

    public static void main(String[] args) {
        RestHighLevelClient client = ElasticsearchConfig.getClient();

        try {
            // 创建文档
            Map<String, Object> jsonMap = new HashMap<>();
            jsonMap.put("name", "猫猫");
            jsonMap.put("age", 30);
            jsonMap.put("email", "admin@java265.com");

            IndexRequest request = new IndexRequest("users")
                    .id("1")
                    .source(jsonMap, XContentType.JSON);

            IndexResponse response = client.index(request, RequestOptions.DEFAULT);
            System.out.println("Indexed with version " + response.getVersion());

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            ElasticsearchConfig.closeClient();
        }
    }
}

例:查询文档

import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.SearchHit;

import java.io.IOException;

public class ElasticsearchExample {

    public static void main(String[] args) {
        RestHighLevelClient client = ElasticsearchConfig.getClient();

        try {
            // 创建查询请求
            SearchRequest searchRequest = new SearchRequest("users");
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
            sourceBuilder.query(QueryBuilders.matchAllQuery());
            searchRequest.source(sourceBuilder);

            // 执行查询
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
            System.out.println("Total hits: " + searchResponse.getHits().getTotalHits().value);

            for (SearchHit hit : searchResponse.getHits()) {
                System.out.println(hit.getSourceAsString());
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            ElasticsearchConfig.closeClient();
        }
    }
}

4.完整示例

配置类
 
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;

public class ElasticsearchConfig {

    private static final String HOST = "localhost";
    private static final int PORT = 9200;
    private static final String SCHEME = "http";

    private static RestHighLevelClient client;

    public static RestHighLevelClient getClient() {
        if (client == null) {
            client = new RestHighLevelClient(
                    RestClient.builder(
                            new HttpHost(HOST, PORT, SCHEME)
                    )
            );
        }
        return client;
    }

    public static void closeClient() {
        if (client != null) {
            try {
                client.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

例:索引文档

import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class ElasticsearchExample {

    public static void main(String[] args) {
        RestHighLevelClient client = ElasticsearchConfig.getClient();

        try {
            // 创建文档
            Map<String, Object> jsonMap = new HashMap<>();
            jsonMap.put("name", "猫猫");
            jsonMap.put("age", 30);
            jsonMap.put("email", "admin@java265.com");

            IndexRequest request = new IndexRequest("users")
                    .id("1")
                    .source(jsonMap, XContentType.JSON);

            IndexResponse response = client.index(request, RequestOptions.DEFAULT);
            System.out.println("Indexed with version " + response.getVersion());

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            ElasticsearchConfig.closeClient();
        }
    }
}

例:查询文档

import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.SearchHit;

import java.io.IOException;

public class ElasticsearchExample {

    public static void main(String[] args) {
        RestHighLevelClient client = ElasticsearchConfig.getClient();

        try {
            // 创建查询请求
            SearchRequest searchRequest = new SearchRequest("users");
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
            sourceBuilder.query(QueryBuilders.matchAllQuery());
            searchRequest.source(sourceBuilder);

            // 执行查询
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
            System.out.println("Total hits: " + searchResponse.getHits().getTotalHits().value);

            for (SearchHit hit : searchResponse.getHits()) {
                System.out.println(hit.getSourceAsString());
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            ElasticsearchConfig.closeClient();
        }
    }
}

5.使用Spring Data Elasticsearch

添加依赖

在 `pom.xml` 文件中添加以下依赖:
 
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
 
配置 Spring Data Elasticsearch

在 `application.properties` 或 `application.yml` 文件中添加配置:
 
spring.elasticsearch.rest.uris=http://localhost:9200
 
 创建实体类
 
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

@Document(indexName = "users")
public class User {

    @Id
    private String id;

    @Field(type = FieldType.Text)
    private String name;

    @Field(type = FieldType.Integer)
    private int age;

    @Field(type = FieldType.Text)
    private String email;

    // Getters and Setters
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", email='" + email + '\'' +
                '}';
    }
}
 
创建 Repository
 
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface UserRepository extends ElasticsearchRepository<User, String> {
}
 
使用 Repository

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.commandlinerunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.util.list;

@SpringBootApplication
public class ElasticsearchApplication implements CommandLineRunner {

    @Autowired
    private UserRepository userRepository;

    public static void main(String[] args) {
        SpringApplication.run(ElasticsearchApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        // 创建用户
        User user1 = new User();
        user1.setName("猫猫");
        user1.setAge(16);
        user1.setEmail("admin@java265.com");

        User user2 = new User();
        user2.setName("test");
        user2.setAge(18);
        user2.setEmail("test@java265.com");

        userRepository.save(user1);
        userRepository.save(user2);

        // 查询所有用户
        List<User> users = (List<User>) userRepository.findAll();
        users.forEach(System.out::println);
    }
}

6.运行和测试

Elasticsearch服务正在运行
  可使用 Kibana
    或
  其他工具来验证数据是否正确索引和查询
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/Spring/202503/8374.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者