Java操作Elasticsearch 之 [Java High Level REST Clientedit]

本文介绍了如何使用Java High Level REST Client操作Elasticsearch,涵盖创建、删除索引,检查索引存在及文档API的使用,包括同步、异步执行和相关参数设置。
摘要由CSDN通过智能技术生成

1. 简述

  • Elasticsearch 是基于 Lucene 开发的一个分布式全文检索框架,向 Elasticsearch 中存储和从 Elasticsearch 中查询,格式是json。

  • Elasticsearch 中存储数据,其实就是向 es 中的 index 下面的 type 中存储 json 类型的数据。

  • elasticsearch 提供了很多语言的客户端用于操作 elasticsearch 服务,例如: javapython.netJavaScriptPHP 等。本文主要介绍如何使用 java 语言来操作 elasticsearch 服务。在 elasticsearch 的官网上提供了两种 java 语言的 API ,一种是 Java Transport Client,一种是 Java REST Client

Java Transport Client** 是基于 TCP 协议交互的,**在 elasticsearch 7.0+ 版本后官方不再赞成使用,在Elasticsearch 8.0的版本中完全移除 TransportClient

** Java REST Client 是基于 HTTP 协议交互,**而 Java REST Client 又分为 Java Low Level REST ClientJava High Level REST Client

  • Java High Level REST Client 是在 Java Low Level REST Client 的基础上做了封装,使其以更加面向对象和操作更加便利的方式调用 elasticsearch 服务。

官方推荐使用 Java High Level REST Client ,因为在实际使用中, Java Transport Client 在大并发的情况下会出现连接不稳定的情况。 那接下来我们就来看看 elasticsearch 提供的 Java High Level REST Client (以下简称高级REST客户端)的一些基础的操作,跟多的操作大家自行阅读elasticsearch的官方文档: [https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high.html](https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high.html)

2. 准备

  • 环境:

    • Windows 10
    • elasticsearch 7.91
    • IDEA
    • Maven
    • Java 8

      高级客户端需要 Java 1.8 并依赖于 Elasticsearch core 项目

  • 依赖:

        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.9.1</version>
        </dependency>

3. 初始化

RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(
                new HttpHost("localhost", 9200, "http"),
                new HttpHost("localhost", 9201, "http")));
  • 高级客户端将在内部创建用于基于提供的生成器执行请求的低级客户端。该低级客户端维护一个连接池并启动一些线程,因此,当您很好地完成高级客户端时,您应该关闭该高级客户端,然后关闭内部低级客户端以释放这些资源。这可以通过 以下时间完成: close
client.close();

在有关 Java 高级客户端的本文档的其余部分中,实例将引用为 。 RestHighLevelClient client
案例: 

  • 查询 index 代码:
public static void main(String[] args)  {
        RestClientBuilder builder = RestClient.builder(
                new HttpHost(
                "127.0.0.1",  //es主机 IP
                9200   // es 端口http
                )
        );
        RestHighLevelClient client = new RestHighLevelClient(builder);
        GetRequest request = new GetRequest(
                "blog1", //索引
                "1" //文档ID
        );

        //当针对不存在的索引执行获取请求时,响应404状态码,将引发IOException,需要按如下方式处理:
        GetResponse documentFields = null;
        try {
            documentFields = client.get(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
            处理因为索引不存在而抛出的异常情况 
        }
        System.out.println(documentFields);
        try {
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
  • 查询结果:
{
    "_index": "blog1",
    "_type": "_doc",
    "_id": "1",
    "_version": 1,
    "_seq_no": 0,
    "_primary_term": 1,
    "found": true,
    "_source": {
        "age": 1,
        "country": "fuzhou",
        "date": "2020-09-10",
        "name": "ngitvusercancel"
    }
}

上述是一个案例的展示,让我们初步了解通过 Java 的高级 restful 客户端来访问, 下面我们将进行相关 Api 的介绍

4. 索引 API (Index Api)

4.1 创建索引(Create Index API)

**

4.1.1 案例:

    /*
     * 创建索引.
     * url:https://i-code.online/
     */
    public static void main(String[] args) {
        //创建链接信息
        RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("127.0.0.1",9200)));

        //创建索引请求 索引名称 student
        CreateIndexRequest createIndexRequest = new CreateIndexRequest("student-1");

        //创建索引时可以设置与之相关的 特定配置
        createIndexRequest.settings(Settings.builder()
                .put("index.number_of_shards",3) //分片数
                .put("index.number_of_replicas",2) //备份数
        );
        //创建文档类型映射
        createIndexRequest.mapping("{\n" +
                "  \"properties\": {\n" +
                "    \"id\": {\n" +
                "      \"type\": \"long\",\n" +
                "      \"store\": true\n" +
                "    },\n" +
                "    \"name\": {\n" +
                "      \"type\": \"text\",\n" +
                "      \"index\": true,\n" +
                "      \"analyzer\": \"ik_max_word\"\n" +
                "    },\n" +
                "    \"content\": {\n" +
                "      \"type\": \"text\",\n" +
                "      \"index\": true,\n" +
                "      \"analyzer\": \"ik_max_word\"\n" +
                "    }\n" +
                "  }\n" +
                "}",
                XContentType.JSON  //类型映射,需要的是一个JSON字符串
        );
        //可选参数
        //超时,等待所有节点被确认(使用TimeValue方式)
        createIndexRequest.setTimeout(TimeValue.timeValueMinutes(1));

        try {
            //同步执行
            CreateIndexResponse createIndexResponse = client.indices().create(createIndexRequest, RequestOptions.DEFAULT);
            //返回的CreateIndexResponse允许检索有关执行的操作的信息,如下所示:
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值