一文读懂 Java操作Elasticsearch


一文读懂 Java操作Elasticsearch

文章插图
 
1. 简述
  • Elasticsearch 是基于 Lucene 开发的一个分布式全文检索框架,向 Elasticsearch 中存储和从 Elasticsearch 中查询,格式是json 。
  • 向 Elasticsearch 中存储数据,其实就是向 es 中的 index 下面的 type 中存储 json 类型的数据 。
  • elasticsearch 提供了很多语言的客户端用于操作 elasticsearch 服务,例如: JAVA 、 Python 、 .net 、 JavaScript 、 php 等 。本文主要介绍如何使用 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 Client 和 Java 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. 初始化
  • 实例需要构建 REST 低级客户端生成器,如下所示: RestHighLevelClient
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主机 IP9200// 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();}}


推荐阅读