Java 如何集成 Elasticsearch呢?
下文笔者讲述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
或
其他工具来验证数据是否正确索引和查询
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


