Java 操作RestHighLevelClient基本使用

这篇具有很好参考价值的文章主要介绍了Java 操作RestHighLevelClient基本使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在使用 RestHighLevelClient的过程中发现,它已经标记为过时了。

在 Elasticsearch7.15版本之后,Elasticsearch官方将它的高级客户端 RestHighLevelClient标记为弃用状态。
同时推出了全新的 Java API客户端 Elasticsearch Java API Client,该客户端也将在 Elasticsearch8.0及以后版本中成为官方推荐使用的客户端。

由于项目中使用的是低版本的ES。所有有必要记录一下它的基本使用。

参考官方AP文档:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.17/java-rest-high-supported-apis.html

一、将连接信息封装成工具类

引入依赖:

    <!--与ES安装版本保持一致-->
    <dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>elasticsearch-rest-high-level-client</artifactId>
      <version>7.17.4</version>
    </dependency>

新建工具类,简单封装一下。

public class ESUtil {
    private static RestHighLevelClient restHighLevelClient;

    static {
        RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost("192.168.xxx.xxx", 9200, "http"));
        restHighLevelClient = new RestHighLevelClient(restClientBuilder);
        System.out.println("==========Connect to Elasticsearch successfully================");
    }

    public static RestHighLevelClient getRestHighLevelClient() {
        return restHighLevelClient;
    }

    @Test
    public void test(){
        RestHighLevelClient restHighLevelClient = ESUtil.getRestHighLevelClient();
        System.out.println(restHighLevelClient);
    }
}

二、索引操作

1、创建索引

1.1 默认创建索引

    // 创建索引(PUT /索引名称)
    @Test
    public void testCreateIndex() throws IOException {
        // 1、获取客户端
        RestHighLevelClient restHighLevelClient = ESUtil.getRestHighLevelClient();
        // 2、创建索引请求
        CreateIndexRequest indexRequest = new CreateIndexRequest("db_index1");
        // 3、客户端执行请求 IndicesClient,请求后获得响应
        CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(indexRequest, RequestOptions.DEFAULT);
        System.out.println(createIndexResponse.index());
        System.out.println(createIndexResponse.isAcknowledged());
    }

查看索引信息:

{
  "db_index1" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "age" : {
          "type" : "long"
        },
        "createTime" : {
          "type" : "long"
        },
        "email" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "height" : {
          "type" : "float"
        },
        "id" : {
          "type" : "long"
        },
        "updateTime" : {
          "type" : "long"
        },
        "userName" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "version" : {
          "type" : "long"
        }
      }
    },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "1",
        "provided_name" : "db_index1",
        "creation_date" : "1661680036350",
        "number_of_replicas" : "1",
        "uuid" : "fwgaTuOBRkKr092qLRTHsw",
        "version" : {
          "created" : "7170499"
        }
      }
    }
  }
}

1.2 指定参数创建索引

    /**
     * 创建索引,使用ik分词器
     * @throws IOException
     */
    @Test
    public void createIndex() throws IOException {
        RestHighLevelClient restHighLevelClient = ESUtil.getRestHighLevelClient();
        CreateIndexRequest request = new CreateIndexRequest("db_index2");
        // 设置setting
        request.settings(Settings.builder()
                .put("index.number_of_shards", 3)
                .put("index.number_of_replicas", 2)
                .put("index.analysis.analyzer.default.type", "ik_max_word") //指定 ik分词器作为默认分词器
        );

        // 设置mapping
        String mapping = "{\n" +
                "      \"properties\" : {\n" +
                "        \"age\" : {\n" +
                "          \"type\" : \"long\"\n" +
                "        },\n" +
                "        \"createTime\" : {\n" +
                "          \"type\" : \"long\"\n" +
                "        },\n" +
                "        \"email\" : {\n" +
                "          \"type\" : \"text\",\n" +
                "          \"fields\" : {\n" +
                "            \"keyword\" : {\n" +
                "              \"type\" : \"keyword\",\n" +
                "              \"ignore_above\" : 256\n" +
                "            }\n" +
                "          }\n" +
                "        },\n" +
                "        \"height\" : {\n" +
                "          \"type\" : \"float\"\n" +
                "        },\n" +
                "        \"id\" : {\n" +
                "          \"type\" : \"long\"\n" +
                "        },\n" +
                "        \"updateTime\" : {\n" +
                "          \"type\" : \"long\"\n" +
                "        },\n" +
                "        \"userName\" : {\n" +
                "          \"type\" : \"text\",\n" +
                "          \"fields\" : {\n" +
                "            \"keyword\" : {\n" +
                "              \"type\" : \"keyword\",\n" +
                "              \"ignore_above\" : 256\n" +
                "            }\n" +
                "          }\n" +
                "        },\n" +
                "        \"version\" : {\n" +
                "          \"type\" : \"long\"\n" +
                "        }\n" +
                "      }\n" +
                "    }";
        /**
         * 由于是过时的方法,则 mapping方法需要加_doc。
         */
        request.mapping("_doc", mapping, XContentType.JSON);
        CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
        System.out.println(createIndexResponse.index());
        System.out.println(createIndexResponse.isAcknowledged());
    }

查看索引信息:

{
  "db_index2" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "age" : {
          "type" : "long"
        },
        "createTime" : {
          "type" : "long"
        },
        "email" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "height" : {
          "type" : "float"
        },
        "id" : {
          "type" : "long"
        },
        "updateTime" : {
          "type" : "long"
        },
        "userName" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "version" : {
          "type" : "long"
        }
      }
    },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "3",
        "provided_name" : "db_index2",
        "creation_date" : "1661692389533",
        "analysis" : {
          "analyzer" : {
            "default" : {
              "type" : "ik_max_word"
            }
          }
        },
        "number_of_replicas" : "2",
        "uuid" : "3o0lJVxYT5S7ycg36nrP5A",
        "version" : {
          "created" : "7170499"
        }
      }
    }
  }
}

2、查询索引

    // 查询索引(GET /索引名称/参数)
    @Test
    public void testGetIndex() throws IOException {
        RestHighLevelClient restHighLevelClient = ESUtil.getRestHighLevelClient();
        GetIndexRequest indexRequest = new GetIndexRequest("db_index1");
        //获取
        GetIndexResponse indexResponse = restHighLevelClient.indices().get(indexRequest, RequestOptions.DEFAULT);
        System.out.println(indexResponse.getAliases());
        System.out.println(indexResponse.getMappings());
        System.out.println(indexResponse.getSettings());
    }

3、判断索引是否存在

    // 判断索引是否存在
    @Test
    public void testExistIndex() throws IOException {
        RestHighLevelClient restHighLevelClient = ESUtil.getRestHighLevelClient();
        GetIndexRequest indexRequest = new GetIndexRequest("db_index1");
        //存在
        boolean exists = restHighLevelClient.indices().exists(indexRequest, RequestOptions.DEFAULT);
        System.out.println(exists);
    }

4、删除索引

    // 删除索引(DELETE /索引名称)
    @Test
    public void testDeleteIndex() throws IOException {
        RestHighLevelClient restHighLevelClient = ESUtil.getRestHighLevelClient();
        DeleteIndexRequest request = new DeleteIndexRequest("db_index2");
        // 删除
        AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println(delete.isAcknowledged());
    }

三、文档操作

@Data
@ToString
public class UserVO {

    private Long id;

    private String userName;

    private Integer age;

    private Double height;

    private String email;

    private Date createTime;

    private Date updateTime;

    private Integer enabled;

    private Integer version;
}

1、添加文档

    /**
     * 添加文档(POST /索引名称/[_doc | _create ]/id)。如果 id已存在,则会全量修改。
     *
     * @throws IOException
     */
    @Test
    public void testAddDocument() throws IOException {
        // 1、获取客户端
        RestHighLevelClient restHighLevelClient = ESUtil.getRestHighLevelClient();

        // 2、构建文档数据
        UserVO userVO = new UserVO();
        userVO.setId(1L);
        userVO.setUserName("赵云2");
        userVO.setAge(18);
        userVO.setCreateTime(new Date());
        userVO.setUpdateTime(new Date());
        userVO.setEmail("ss.com");
        userVO.setVersion(1);
        userVO.setHeight(12D);
        // 创建请求
        IndexRequest indexRequest = new IndexRequest("db_index1"); //索引不存在时,会自动创建
        indexRequest.id(userVO.getId().toString());
        indexRequest.timeout(TimeValue.timeValueSeconds(1));
        indexRequest.timeout("1s");
        // 3、将文档数据放入请求 json
        indexRequest.source(JSON.toJSONString(userVO), XContentType.JSON);
        // 4、客户端发送请求 , 获取响应的结果
        IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println(indexResponse.toString()); //
        System.out.println(indexResponse.status()); // 对应命令返回的状态CREATED/OK
    }

2、获取文档

    // 获得文档记录(get //索引名称/doc/id)
    @Test
    public void testGetDocument() throws IOException {
        RestHighLevelClient restHighLevelClient = ESUtil.getRestHighLevelClient();

        GetRequest getRequest = new GetRequest("db_index1", "1");
        //获取
        GetResponse getResponse = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
        System.out.println(getResponse.getSourceAsString()); // 打印文档的内容
        System.out.println(getResponse); // 返回的全部内容和命令式一样的
    }

3、判断文档是否存在

    // 判断文档是否存在
    @Test
    public void testIsExists() throws IOException {
        RestHighLevelClient restHighLevelClient = ESUtil.getRestHighLevelClient();

        GetRequest getRequest = new GetRequest("db_index1", "1");
        // 不获取返回的 _source 的上下文了
        getRequest.fetchSourceContext(new FetchSourceContext(false));
        getRequest.storedFields("_none_");
        // 存在
        boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println(exists);
    }

4、增量更新文档记录

   /**
     * 增量更新文档记录(POST /索引名称/_update/id),文档必须存在。
     * @throws IOException
     */
    @Test
    public void testUpdateRequest() throws IOException {
        RestHighLevelClient restHighLevelClient = ESUtil.getRestHighLevelClient();
        // 构建文档数据
        UserVO userVO = new UserVO();
        userVO.setId(1L);
        userVO.setUserName("赵云update");
        userVO.setHeight(1.88D);
        userVO.setCreateTime(new Date());

        // 根据文档id修改
        UpdateRequest updateRequest = new UpdateRequest("db_index1", userVO.getId().toString());
        updateRequest.timeout("1s");
        // 将文档数据放入请求 json
        updateRequest.doc(JSON.toJSONString(userVO), XContentType.JSON);
        // 修改
        UpdateResponse updateResponse = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println(updateResponse.status()); // 对应命令返回的状态OK
    }

5、删除文档

    // 删除文档记录(DELETE  //索引名称/_doc/id)
    @Test
    public void testDeleteRequest() throws IOException {
        RestHighLevelClient restHighLevelClient = ESUtil.getRestHighLevelClient();
        DeleteRequest request = new DeleteRequest("db_index1", "1");
        request.timeout("1s");
        // 删除
        DeleteResponse deleteResponse = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
        System.out.println(deleteResponse.status()); // 对应命令返回的状态OK
    }

6、批量操作文档数据

    @Test
    public void testBulkRequest() throws IOException {
        RestHighLevelClient restHighLevelClient = ESUtil.getRestHighLevelClient();

        // 构建批处理请求
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("10s");

        for (int i = 1; i <= 5; i++) {
            UserVO userVO = new UserVO();
            userVO.setId(1L);
            userVO.setUserName("赵云batch" + i );
            userVO.setHeight(1.88D);
            userVO.setAge(10 + i);
            userVO.setCreateTime(new Date());

            // 批量添加/更新和批量删除,只需要修改对应的请求即可
            IndexRequest indexRequest = new IndexRequest("db_index2");
            indexRequest.id(userVO.getId().toString());
            indexRequest.source(JSON.toJSONString(userVO), XContentType.JSON);
            bulkRequest.add(indexRequest);
        }
        //执行批处理请求
        BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulkResponse.hasFailures()); // 是否失败,返回 false 代表 成功!
    }

– 求知若饥,虚心若愚。文章来源地址https://www.toymoban.com/news/detail-503298.html

到了这里,关于Java 操作RestHighLevelClient基本使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot 整合 Elasticsearch(五):使用RestHighLevelClient操作ES ②

    📁 前情提要: Springboot 整合 Elasticsearch(三):使用RestHighLevelClient操作ES ① 目录  一、Springboot 整合 Elasticsearch 1、RestHighLevelClient API介绍 1.1、全查询 分页 排序 1.2、单条件查询 1.2.1、termQuery 1.2.2、matchQuery 1.2.3、短语检索 1.3、组合查询 1.4、范围查询 1.5、模糊查询 1.6、分组

    2024年04月11日
    浏览(43)
  • Java使用Springboot集成Es官方推荐(RestHighLevelClient)

    SpringBoot集成ElasticSearch的四种方式(主要讲解ES官方推荐方式) TransportClient:这种方式即将弃用 官方将在8.0版本彻底去除 Data-Es:Spring提供的封装的方式,由于是Spring提供的,所以每个SpringBoot版本对应的ElasticSearch,具体这么个对应的版本,自己去官网看 ElasticSearch SQL:将Elasti

    2023年04月08日
    浏览(37)
  • Java 中使用 ES 高级客户端库 RestHighLevelClient 清理百万级规模历史数据

    🎉工作中遇到这样一个需求场景:由于ES数据库中历史数据过多,占用太多的磁盘空间,需要定期地进行清理,在一定程度上可以释放磁盘空间,减轻磁盘空间压力。 🎈在经过调研之后发现,某服务项目每周产生的数据量已经达到千万级别,单日将近能产生 两百万 的数据量

    2024年02月11日
    浏览(47)
  • 【已解决】Java 中使用 ES 高级客户端库 RestHighLevelClient 清理百万级规模历史数据

    🎉工作中遇到这样一个需求场景:由于ES数据库中历史数据过多,占用太多的磁盘空间,需要定期地进行清理,在一定程度上可以释放磁盘空间,减轻磁盘空间压力。 🎈在经过调研之后发现,某服务项目每周产生的数据量已经达到千万级别,单日将近能产生 两百万 的数据量

    2024年02月14日
    浏览(48)
  • SpringBoot整合RestHighLevelClient实现查询操作

    😊 @ 作者: 一恍过去 💖 @ 主页: https://blog.csdn.net/zhuocailing3390 🎊 @ 社区: Java技术栈交流 🎉 @ 主题: SpringBoot整合RestHighLevelClient实现查询操作 ⏱️ @ 创作时间: 2022年08月14日 为了方便查询操作,创建索引叫做: nba ,并且添加数据,http请求如下: 结果: term 查询被用于

    2024年02月04日
    浏览(45)
  • Elasticsearch-RestHighLevelClient基础操作

    该篇文章参考下面博主文章 Java中ElasticSearch的各种查询(普通,模糊,前缀,高亮,聚合,范围) 【es】java使用es中三种查询用法from size、search after、scroll 删除索引会把索引中已经创建好的数据也删除,就好像我们在mysql中删除库,会把库的数据也删除掉一样。 类似关闭数据

    2024年02月08日
    浏览(46)
  • SpringBoot 实现 elasticsearch 索引操作(RestHighLevelClient 的应用)

    RestHighLevelClient 是 Elasticsearch 官方提供的Java高级客户端,用于与 Elasticsearch 集群进行交互和执行各种操作。 主要特点和功能如下 : 强类型 :RestHighLevelClient 提供了强类型的 API,可以在编码过程中获得更好的类型安全性和 IDE 支持。 兼容性 :RestHighLevelClient 是 Elasticsearch 官方

    2024年02月11日
    浏览(51)
  • SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)

    上一节讲述了 SpringBoot 实现 elasticsearch 索引操作,这一章节讲述 SpringBoot 实现 elasticsearch 查询操作。 案例用到的索引库结构

    2024年02月11日
    浏览(46)
  • Java操作mongodb的基本操作

    目录 MongoDB的基本操作 新增 方式一: 方式二: 删除:  带条件的删除 修改 修改条件 修改并添加  多条件修改: 查询 普通查询 条件查询 ​编辑 多条件查询 模糊查询: 查询除来的结果有两种的显示方式: MongoDB中的文档本质上是一种类似JSON的BSON格式的数据。 BSON是一种类

    2023年04月09日
    浏览(52)
  • java 操作es 的基本操作

    创建索引 创建索引别名 索引的相关设置 查询索引数据 bulk 导入数据 持续更新中~ pom的坐标

    2024年01月20日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包