当前位置:   article > 正文

ES-JavaAPI操作_elasticsearch java api操作

elasticsearch java api操作

1.简介

Elasticsearch是一个开源的分布式搜索和分析引擎,可以快速实时地存储、搜索和分析海量数据。它提供了HTTP RESTful API供开发者使用,也有Java等多种语言的客户端库,方便开发者进行数据的增删改查操作。

本篇文章将围绕ES-JavaAPI展开,详细介绍如何使用Java操作Elasticsearch

2.环境准备

在开始编写Java代码之前,需要先安装并启动Elasticsearch服务。可以从官方网站下载并安装Elasticsearch。安装完成后,通过命令行启动服务,并确保服务正常运行。

3.导入依赖

接下来,创建一个Java项目,并在项目的构建文件中添加ElasticsearchJava客户端库依赖。可以使用MavenGradle进行依赖管理。

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'

4.连接Elasticsearch

在开始进行操作之前,首先需要连接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

5.创建索引

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()方法判断索引是否存在。

6.添加文档

在已创建的索引中添加文档。文档是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()方法来判断添加结果。

7.获取文档

在已创建的索引中获取文档。

代码示例:

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()方法获取文档的内容。

8.更新文档

在已创建的索引中更新文档。

代码示例:

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()方法来判断更新结果。

9.删除文档

在已创建的索引中删除文档。

代码示例:

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()方法来判断删除结果。

10.搜索文档

在已创建的索引中搜索文档。

代码示例:

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的更多功能和用法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/68307
推荐阅读
相关标签
  

闽ICP备14008679号