如何使用Java的rest-high-level-client进行Elasticsearch基础操作?

2026-05-26 00:131阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1538个文字,预计阅读时间需要7分钟。

如何使用Java的rest-high-level-client进行Elasticsearch基础操作?

目录 + Elasticsearch + REST High Level Client + 基本操作 + 前置准备

1.配置依赖

2.构建RestHighLevelClient

3.创建索引 client.indices.create

4.删除索引 client.indices.delete

5.查询索引 client.indices.get

6.插入文档

目录
  • Elasticsearch rest-high-level-client 基本操作
  • 前置准备
    • 1.配置依赖
    • 2.构建 RestHighLevelClient
    • 3.创建索引 client.indices().create
    • 4.删除索引 client.indices().delete
    • 5.查询索引 client.indices().get
    • 6.插入文档 client.index
    • 7.查询文档 client.get
    • 8.删除文档 client.delete
  • 总结

    Elasticsearch rest-high-level-client 基本操作

    本篇主要讲解一下 rest-high-level-client 去操作 Elasticsearch , 虽然这个客户端在后续版本中会慢慢淘汰,但是目前大部分公司中使用Elasticsearch 版本都是6.x 所以这个客户端还是有一定的了解

    前置准备

    • 准备一个SpringBoot环境 2.2.11 版本
    • 准备一个Elasticsearch 环境 我这里是8.x版本
    • 引入依赖 elasticsearch-rest-high-level-client 7.4.2

    1.配置依赖

    注意: 我使用的是 springboot 2.2.11 版本 , 它内部的 elasticsearch 和 elasticsearch-rest-client 都是 6.8.13 需要注意

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- 引入 elasticsearch 7.4.2 --> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.4.2</version> <exclusions> <exclusion> <artifactId>log4j-api</artifactId> <groupId>org.apache.logging.log4j</groupId> </exclusion> </exclusions> </dependency> <!-- 排除 elasticsearch-rest-client , 也可不排除 为了把maven冲突解决 --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.4.2</version> <exclusions> <exclusion> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId> </exclusion> <exclusion> <artifactId>elasticsearch</artifactId> <groupId>org.elasticsearch</groupId> </exclusion> </exclusions> </dependency> <!-- 不引入会导致可能 使用 springboot的 elasticsearch-rest-client 6.8.13 --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId> <version>7.4.2</version> </dependency> <!-- elasticsearch 依赖 2.x 的 log4j --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.8.2</version> <!-- 排除掉 log4j-api 因为springbootstarter 中引入了loging模块 --> <exclusions> <exclusion> <artifactId>log4j-api</artifactId> <groupId>org.apache.logging.log4j</groupId> </exclusion> </exclusions> </dependency> <!-- junit 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency>

    2.构建 RestHighLevelClient

    highlevelclient 是 高级客户端 需要通过它去操作 Elasticsearch , 它底层也是要依赖 rest-client 低级客户端

    @Slf4j public class TestEsClient { private RestHighLevelClient client = null; private ObjectMapper objectMapper = new ObjectMapper(); //构建 RestHighLevelClient @Before public void prepare() { // 创建Client连接对象 String[] ips = {"172.16.225.111:9200"}; HttpHost[] httpHosts = new HttpHost[ips.length]; for (int i = 0; i < ips.length; i++) { httpHosts[i] = HttpHost.create(ips[i]); } RestClientBuilder builder = RestClient.builder(httpHosts); client = new RestHighLevelClient(builder); } }

    3.创建索引 client.indices().create

    创建索引 需要使用 CreateIndexRequest 对象 , 操作 索引基本上是 client.indices().xxx

    构建 CreateIndexRequest 对象

    @Test public void test1() { CreateIndexRequest request = new CreateIndexRequest("blog1"); try { CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT); boolean acknowledged = createIndexResponse.isAcknowledged(); log.info("[create index blog :{}]", acknowledged); } catch (IOException e) { e.printStackTrace(); } }

    如何使用Java的rest-high-level-client进行Elasticsearch基础操作?

    4.删除索引 client.indices().delete

    构建 DeleteIndexRequest 对象

    @Test public void testDeleteIndex(){ DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("blog1"); try { AcknowledgedResponse response = client.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT); log.info("[delete index response: {}", response.isAcknowledged()); } catch (IOException e) { e.printStackTrace(); } }

    5.查询索引 client.indices().get

    构建 GetIndexRequest 对象

    @Test public void testSearchIndex() { GetIndexRequest request = new GetIndexRequest("blog1"); try { GetIndexResponse getIndexResponse = client.indices().get(request, RequestOptions.DEFAULT); Map<String, List<AliasMetaData>> aliases = getIndexResponse.getAliases(); Map<String, MappingMetaData> mappings = getIndexResponse.getMappings(); Map<String, Settings> settings = getIndexResponse.getSettings(); log.info("[aliases: {}]", aliases); log.info("[mappings: {}]", mappings); log.info("[settings: {}", settings); } catch (IOException e) { e.printStackTrace(); } }

    可以根据 response 获取 aliases , mappings , settings 等等 和 Kibana 中返回的一样

    6.插入文档 client.index

    插入文档 需要使用 IndexRequest 对象 , 注意 不是 InsertRequest , 不知道为什么不这样定义 感觉会更加好理解

    request.source(blogInfoJsonStr, XContentType.JSON);

    @Test public void insertDoc() { IndexRequest request = new IndexRequest(); request.index("blog1").id("1"); BlogInfo blogInfo = new BlogInfo() .setBlogName("Elasticsearch 入门第一章") .setBlogType("Elasticsearch") .setBlogDesc("本篇主要介绍了Elasticsearch 的基本client操作"); try { //提供java 对象的 json str String blogInfoJsonStr = objectMapper.writeValueAsString(blogInfo); request.source(blogInfoJsonStr, XContentType.JSON); // 这里会抛错 原因是 我的 Elasticsearch 版本8.x 而 使用的 restHighLevel 已经解析不了,因为新的es已经不推荐使用 // restHighLevel,而使用 Elasticsearch Java API Client IndexResponse index = client.index(request, RequestOptions.DEFAULT); log.info("[Result insert doc :{} ]", index); } catch (IOException e) { }

    7.查询文档 client.get

    注意 getResponse.getSourceAsString() 返回文档数据

    @Test public void testSelectDoc() { GetRequest getRequest = new GetRequest(); getRequest.index("blog1").id("1"); try { GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT); BlogInfo blogInfo = objectMapper.readValue(getResponse.getSourceAsString(), BlogInfo.class); log.info("[get doc :{}] ", blogInfo); } catch (IOException e) { e.printStackTrace(); } }

    8.删除文档 client.delete

    注意 删除文档 的 response 也解析不了 Elasticsearch 8.x 版本

    @Test public void testDeleteDoc() { DeleteRequest deleteRequest = new DeleteRequest(); deleteRequest.index("blog1").id("1"); try { // 这里也会抛错 和上面的一样 DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT); log.info("[delete response:{} ]", deleteResponse); } catch (IOException e) { } }

    总结

    本篇主要介绍了 java 操作Elasticsearch 的客户端 rest-high-level-client 的基本使用 , 如果你是使用springboot 需要注意jar 冲突问题, 后续操作 Elasticsearch 客户端 逐渐变成 Elasticsearch Java API Client , 不过目前大部分还是使用 rest-high-level-client

    到此这篇关于Java操作Elasticsearchrest-high-level-client的基本使用的文章就介绍到这了,更多相关Elasticsearchrest-high-level-client内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

    本文共计1538个文字,预计阅读时间需要7分钟。

    如何使用Java的rest-high-level-client进行Elasticsearch基础操作?

    目录 + Elasticsearch + REST High Level Client + 基本操作 + 前置准备

    1.配置依赖

    2.构建RestHighLevelClient

    3.创建索引 client.indices.create

    4.删除索引 client.indices.delete

    5.查询索引 client.indices.get

    6.插入文档

    目录
    • Elasticsearch rest-high-level-client 基本操作
    • 前置准备
      • 1.配置依赖
      • 2.构建 RestHighLevelClient
      • 3.创建索引 client.indices().create
      • 4.删除索引 client.indices().delete
      • 5.查询索引 client.indices().get
      • 6.插入文档 client.index
      • 7.查询文档 client.get
      • 8.删除文档 client.delete
    • 总结

      Elasticsearch rest-high-level-client 基本操作

      本篇主要讲解一下 rest-high-level-client 去操作 Elasticsearch , 虽然这个客户端在后续版本中会慢慢淘汰,但是目前大部分公司中使用Elasticsearch 版本都是6.x 所以这个客户端还是有一定的了解

      前置准备

      • 准备一个SpringBoot环境 2.2.11 版本
      • 准备一个Elasticsearch 环境 我这里是8.x版本
      • 引入依赖 elasticsearch-rest-high-level-client 7.4.2

      1.配置依赖

      注意: 我使用的是 springboot 2.2.11 版本 , 它内部的 elasticsearch 和 elasticsearch-rest-client 都是 6.8.13 需要注意

      <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- 引入 elasticsearch 7.4.2 --> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.4.2</version> <exclusions> <exclusion> <artifactId>log4j-api</artifactId> <groupId>org.apache.logging.log4j</groupId> </exclusion> </exclusions> </dependency> <!-- 排除 elasticsearch-rest-client , 也可不排除 为了把maven冲突解决 --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.4.2</version> <exclusions> <exclusion> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId> </exclusion> <exclusion> <artifactId>elasticsearch</artifactId> <groupId>org.elasticsearch</groupId> </exclusion> </exclusions> </dependency> <!-- 不引入会导致可能 使用 springboot的 elasticsearch-rest-client 6.8.13 --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId> <version>7.4.2</version> </dependency> <!-- elasticsearch 依赖 2.x 的 log4j --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.8.2</version> <!-- 排除掉 log4j-api 因为springbootstarter 中引入了loging模块 --> <exclusions> <exclusion> <artifactId>log4j-api</artifactId> <groupId>org.apache.logging.log4j</groupId> </exclusion> </exclusions> </dependency> <!-- junit 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency>

      2.构建 RestHighLevelClient

      highlevelclient 是 高级客户端 需要通过它去操作 Elasticsearch , 它底层也是要依赖 rest-client 低级客户端

      @Slf4j public class TestEsClient { private RestHighLevelClient client = null; private ObjectMapper objectMapper = new ObjectMapper(); //构建 RestHighLevelClient @Before public void prepare() { // 创建Client连接对象 String[] ips = {"172.16.225.111:9200"}; HttpHost[] httpHosts = new HttpHost[ips.length]; for (int i = 0; i < ips.length; i++) { httpHosts[i] = HttpHost.create(ips[i]); } RestClientBuilder builder = RestClient.builder(httpHosts); client = new RestHighLevelClient(builder); } }

      3.创建索引 client.indices().create

      创建索引 需要使用 CreateIndexRequest 对象 , 操作 索引基本上是 client.indices().xxx

      构建 CreateIndexRequest 对象

      @Test public void test1() { CreateIndexRequest request = new CreateIndexRequest("blog1"); try { CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT); boolean acknowledged = createIndexResponse.isAcknowledged(); log.info("[create index blog :{}]", acknowledged); } catch (IOException e) { e.printStackTrace(); } }

      如何使用Java的rest-high-level-client进行Elasticsearch基础操作?

      4.删除索引 client.indices().delete

      构建 DeleteIndexRequest 对象

      @Test public void testDeleteIndex(){ DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("blog1"); try { AcknowledgedResponse response = client.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT); log.info("[delete index response: {}", response.isAcknowledged()); } catch (IOException e) { e.printStackTrace(); } }

      5.查询索引 client.indices().get

      构建 GetIndexRequest 对象

      @Test public void testSearchIndex() { GetIndexRequest request = new GetIndexRequest("blog1"); try { GetIndexResponse getIndexResponse = client.indices().get(request, RequestOptions.DEFAULT); Map<String, List<AliasMetaData>> aliases = getIndexResponse.getAliases(); Map<String, MappingMetaData> mappings = getIndexResponse.getMappings(); Map<String, Settings> settings = getIndexResponse.getSettings(); log.info("[aliases: {}]", aliases); log.info("[mappings: {}]", mappings); log.info("[settings: {}", settings); } catch (IOException e) { e.printStackTrace(); } }

      可以根据 response 获取 aliases , mappings , settings 等等 和 Kibana 中返回的一样

      6.插入文档 client.index

      插入文档 需要使用 IndexRequest 对象 , 注意 不是 InsertRequest , 不知道为什么不这样定义 感觉会更加好理解

      request.source(blogInfoJsonStr, XContentType.JSON);

      @Test public void insertDoc() { IndexRequest request = new IndexRequest(); request.index("blog1").id("1"); BlogInfo blogInfo = new BlogInfo() .setBlogName("Elasticsearch 入门第一章") .setBlogType("Elasticsearch") .setBlogDesc("本篇主要介绍了Elasticsearch 的基本client操作"); try { //提供java 对象的 json str String blogInfoJsonStr = objectMapper.writeValueAsString(blogInfo); request.source(blogInfoJsonStr, XContentType.JSON); // 这里会抛错 原因是 我的 Elasticsearch 版本8.x 而 使用的 restHighLevel 已经解析不了,因为新的es已经不推荐使用 // restHighLevel,而使用 Elasticsearch Java API Client IndexResponse index = client.index(request, RequestOptions.DEFAULT); log.info("[Result insert doc :{} ]", index); } catch (IOException e) { }

      7.查询文档 client.get

      注意 getResponse.getSourceAsString() 返回文档数据

      @Test public void testSelectDoc() { GetRequest getRequest = new GetRequest(); getRequest.index("blog1").id("1"); try { GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT); BlogInfo blogInfo = objectMapper.readValue(getResponse.getSourceAsString(), BlogInfo.class); log.info("[get doc :{}] ", blogInfo); } catch (IOException e) { e.printStackTrace(); } }

      8.删除文档 client.delete

      注意 删除文档 的 response 也解析不了 Elasticsearch 8.x 版本

      @Test public void testDeleteDoc() { DeleteRequest deleteRequest = new DeleteRequest(); deleteRequest.index("blog1").id("1"); try { // 这里也会抛错 和上面的一样 DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT); log.info("[delete response:{} ]", deleteResponse); } catch (IOException e) { } }

      总结

      本篇主要介绍了 java 操作Elasticsearch 的客户端 rest-high-level-client 的基本使用 , 如果你是使用springboot 需要注意jar 冲突问题, 后续操作 Elasticsearch 客户端 逐渐变成 Elasticsearch Java API Client , 不过目前大部分还是使用 rest-high-level-client

      到此这篇关于Java操作Elasticsearchrest-high-level-client的基本使用的文章就介绍到这了,更多相关Elasticsearchrest-high-level-client内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!