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