赞
踩
Elasticsearch是一个开源的分布式搜索和分析引擎,可以快速实时地存储、搜索和分析海量数据。它提供了HTTP RESTful API供开发者使用,也有Java等多种语言的客户端库,方便开发者进行数据的增删改查操作。
本篇文章将围绕ES-JavaAPI展开,详细介绍如何使用Java操作Elasticsearch。
在开始编写Java代码之前,需要先安装并启动Elasticsearch服务。可以从官方网站下载并安装Elasticsearch。安装完成后,通过命令行启动服务,并确保服务正常运行。
接下来,创建一个Java项目,并在项目的构建文件中添加Elasticsearch的Java客户端库依赖。可以使用Maven或Gradle进行依赖管理。
Maven依赖:
<dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.8.1</version> </dependency> |
Gradle依赖:
implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.8.1'
在开始进行操作之前,首先需要连接Elasticsearch。使用Elasticsearch提供的RestHighLevelClient类来实现连接。
代码示例:
import org.apache.http.HttpHost; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; public class ElasticsearchConnector { private RestHighLevelClient client; public ElasticsearchConnector() { client = new RestHighLevelClient( RestClient.builder( new HttpHost("localhost", 9200, "http") ) ); } public RestHighLevelClient getClient() { return client; } } |
上述代码创建了一个ElasticsearchConnector类,并在构造方法中初始化了RestHighLevelClient客户端并与Elasticsearch建立连接。其中,连接的地址为localhost,端口为9200。
在Elasticsearch中,索引类似于关系型数据库中的表,可以理解为一个数据集合。在创建索引之前,需要先连接Elasticsearch。
代码示例:
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest; import org.elasticsearch.action.admin.indices.create.CreateIndexResponse; import org.elasticsearch.action.support.master.AcknowledgedResponse; import org.elasticsearch.client.indices.GetIndexRequest; import org.elasticsearch.client.indices.GetIndexResponse; import org.elasticsearch.client.RestHighLevelClient; public class IndexOperations { public static void main(String[] args) throws IOException { ElasticsearchConnector connector = new ElasticsearchConnector(); RestHighLevelClient client = connector.getClient(); // 创建索引 String indexName = "my_index"; CreateIndexRequest request = new CreateIndexRequest(indexName); CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT); boolean acknowledged = createIndexResponse.isAcknowledged(); if (acknowledged) { System.out.println("索引创建成功"); } // 判断索引是否存在 GetIndexRequest getIndexRequest = new GetIndexRequest(indexName); boolean exists = client.indices().exists(getIndexRequest, RequestOptions.DEFAULT); if (exists) { System.out.println("索引已存在"); } client.close(); } } |
上述代码示例中,首先创建了一个名为my_index的索引,然后通过create()方法来创建索引。创建成功后,将会获得一个CreateIndexResponse对象,可以通过isAcknowledged()方法来判断是否创建成功。
接着,使用exists()方法判断索引是否存在。
在已创建的索引中添加文档。文档是Elasticsearch中的最小单位数据。
代码示例:
import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.xcontent.XContentType; public class DocumentOperations { public static void main(String[] args) throws IOException { ElasticsearchConnector connector = new ElasticsearchConnector(); RestHighLevelClient client = connector.getClient(); // 添加文档 String indexName = "my_index"; String documentId = "1"; String jsonString = "{\"title\":\"Java入门教程\",\"author\":\"Tom\",\"content\":\"Java是一门面向对象的编程语言\"}"; IndexRequest request = new IndexRequest(indexName).id(documentId).source(jsonString, XContentType.JSON); IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT); if (indexResponse.getResult() == DocWriteResponse.Result.CREATED) { System.out.println("文档添加成功"); } client.close(); } } |
上述代码通过IndexRequest来创建一个索引请求,并指定索引的名称、文档ID和内容。然后使用index()方法将文档添加到指定索引中。添加成功后,将会获得一个IndexResponse对象,可以通过getResult()方法来判断添加结果。
在已创建的索引中获取文档。
代码示例:
import org.elasticsearch.action.get.GetRequest; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.client.RestHighLevelClient; public class DocumentOperations { public static void main(String[] args) throws IOException { ElasticsearchConnector connector = new ElasticsearchConnector(); RestHighLevelClient client = connector.getClient(); // 获取文档 String indexName = "my_index"; String documentId = "1"; GetRequest getRequest = new GetRequest(indexName, documentId); GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT); if (getResponse.isExists()) { String sourceAsString = getResponse.getSourceAsString(); System.out.println(sourceAsString); } client.close(); } } |
上述代码通过GetRequest来创建一个获取文档的请求,并指定索引的名称和文档ID。然后使用get()方法获取指定的文档。获取成功后,将会获得一个GetResponse对象,可以通过isExists()方法判断文档是否存在,通过getSourceAsString()方法获取文档的内容。
在已创建的索引中更新文档。
代码示例:
import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.action.update.UpdateResponse; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.doc.DocWriteRequest; import org.elasticsearch.common.doc.DocWriteResponse; import org.elasticsearch.common.xcontent.XContentType; public class DocumentOperations { public static void main(String[] args) throws IOException { ElasticsearchConnector connector = new ElasticsearchConnector(); RestHighLevelClient client = connector.getClient(); // 更新文档 String indexName = "my_index"; String documentId = "1"; String jsonString = "{\"title\":\"Java入门教程\",\"author\":\"Tom\",\"content\":\"Java是一门面向对象的编程语言,非常流行\"}"; UpdateRequest request = new UpdateRequest(indexName, documentId).doc(jsonString, XContentType.JSON); request.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL); UpdateResponse updateResponse = client.update(request, RequestOptions.DEFAULT); if (updateResponse.getResult() == DocWriteResponse.Result.UPDATED) { System.out.println("文档更新成功"); } client.close(); } } |
上述代码通过UpdateRequest来创建一个更新文档的请求,并指定索引的名称、文档ID和更新的内容。然后使用update()方法来更新文档。更新成功后,将会获得一个UpdateResponse对象,可以通过getResult()方法来判断更新结果。
在已创建的索引中删除文档。
代码示例:
import org.elasticsearch.action.delete.DeleteRequest; import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.action.support.replication.ReplicationResponse; import org.elasticsearch.client.RestHighLevelClient; public class DocumentOperations { public static void main(String[] args) throws IOException { ElasticsearchConnector connector = new ElasticsearchConnector(); RestHighLevelClient client = connector.getClient(); // 删除文档 String indexName = "my_index"; String documentId = "1"; DeleteRequest request = new DeleteRequest(indexName, documentId); DeleteResponse deleteResponse = client.delete(request, RequestOptions.DEFAULT); if (deleteResponse.getResult() == DocWriteResponse.Result.DELETED) { System.out.println("文档删除成功"); } client.close(); } } |
上述代码通过DeleteRequest来创建一个删除文档的请求,并指定索引的名称和文档ID。然后使用delete()方法来删除文档。删除成功后,将会获得一个DeleteResponse对象,可以通过getResult()方法来判断删除结果。
在已创建的索引中搜索文档。
代码示例:
import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.builder.SearchSourceBuilder; public class DocumentOperations { public static void main(String[] args) throws IOException { ElasticsearchConnector connector = new ElasticsearchConnector(); RestHighLevelClient client = connector.getClient(); // 搜索文档 String indexName = "my_index"; String searchQuery = "Java"; SearchRequest searchRequest = new SearchRequest(indexName); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.matchQuery("content", searchQuery)); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); SearchHit[] searchHits = searchResponse.getHits().getHits(); for (SearchHit hit : searchHits) { String sourceAsString = hit.getSourceAsString(); System.out.println(sourceAsString); } client.close(); } } |
上述代码通过SearchRequest来创建一个搜索文档的请求,并指定索引的名称。然后使用SearchSourceBuilder来构建查询条件,这里使用了QueryBuilders.matchQuery()方法来定义查询内容包含指定关键字的查询条件。最后使用search()方法来执行搜索操作。搜索成功后,将会获得一个SearchResponse对象,可以通过getHits()方法获取搜索结果,遍历结果并打印出来。
本文介绍了如何使用ES-JavaAPI进行Elasticsearch的操作,包括连接、创建索引、添加文档、获取文档、更新文档、删除文档和搜索文档。通过本文的示例代码,可以更好地理解和掌握ES-JavaAPI的使用方法。
以上示例代码仅为简要演示,并未考虑异常处理和性能优化等方面的内容,建议在实际项目中根据具体需求,进行适当的优化和异常处理。同时,建议参考Elasticsearch官方文档和API文档,深入学习ES-JavaAPI的更多功能和用法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。