Elasticsearch Java Rest Client API 整理总结 (一)

引言

业余时间搞 python 爬虫爬取数据,完善我的汽车销量查询小助手(小程序);工作时间还是要努力完成领导分配的任务,做我的 Java 老本行的。

这不,现在就有个需求,集团要将 elasticsearch 版本从 2.2 升级到 6.3, 由于之前做项目使用 spring data es 来完成 es 数据的增删该查,现在一下升级到这么高的版本,遇到各种 API 不兼容的问题。并且 spring data es 由于整体框架 spring 等版本的限制,也不能使用了。

无奈之下,只能使用 elasticsearch 提供的 java reset client API 来完成之前的操作。工欲善其事,必先利其器。要使用 API,第一步就是要完整,熟练的理解各个 API 的用途,限制。在学习 API 的过程中,我将 API 的文档统一整理了一番,方便自己使用时查询,也希望能对用到这部分的同学提供方便。

注意,本 API 指南只针对 elasticsearch 6.3 版本。

概述

Rest client 分成两部分:

Java Low Level REST Client

官方低级别 es 客户端,使用 http 协议与 Elastiicsearch 集群通信,与所有 es 版本兼容。

Java High level REST Client

官方高级别 es 客户端,基于低级别的客户端,它会暴露 API 特定的方法。

官方文档链接地址

High REST Client

High Client 基于 Low Client, 主要目的是暴露一些 API,这些 API 可以接受请求对象为参数,返回响应对象,而对请求和响应细节的处理都是由 client 自动完成的。

每个 API 在调用时都可以是同步或者异步的。同步和异步 API 的区别是什么呢?

同步 API 会导致阻塞,一直等待数据返回

异步 API 在命名上会加上 async 后缀,需要有一个 listener 作为参数,等这个请求返回结果或者发生错误时,这个 listener 就会被调用

起步 兼容性

java 1.8

Elasticsearch 核心项目

Java Doc 地址

只有英文版

Maven 配置 <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>6.3.2</version> </dependency> 依赖

org.elasticsearch.client:elasticsearch-rest-client

org.elasticsearch:elasticsearch

初始化

RestHighLevelClient 实例依赖 REST low-level client builder

RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("localhost", 9200, "http"), new HttpHost("localhost", 9201, "http")));

High-level client 会依赖 Low-level client 来执行请求, low-level client 则会维护一个请求的线程连接池,因为当 high-level 请求处理结束时,应该 close 掉这个连接,使 low-level client 能尽快释放资源。

client.close(); 文档 API

High level rest 客户端支持下面的 文档(Document) API

单文档 API

index API

Get API

Delete API

Update API

多文档 API

Bulk API

Multi-Get API

Index API IndexRequest IndexRequest request = new IndexRequest( "posts", // 索引 Index "doc", // Type "1"); // 文档 Document Id String jsonString = "{" + "\"user\":\"kimchy\"," + "\"postDate\":\"2013-01-30\"," + "\"message\":\"trying out Elasticsearch\"" + "}"; request.source(jsonString, XContentType.JSON); // 文档源格式为 json string Document Source

document source 可以是下面的格式

Map

Map<String, Object> jsonMap = new HashMap<>(); jsonMap.put("user", "kimchy"); jsonMap.put("postDate", new Date()); jsonMap.put("message", "trying out Elasticsearch"); IndexRequest indexRequest = new IndexRequest("posts", "doc", "1") .source(jsonMap); // 会自动将 Map 转换为 JSON 格式

XContentBuilder : 这是 Document Source 提供的帮助类,专门用来产生 json 格式的数据

XContentBuilder builder = XContentFactory.jsonBuilder(); builder.startObject(); { builder.field("user", "kimchy"); builder.timeField("postDate", new Date()); builder.field("message", "trying out Elasticsearch"); } builder.endObject(); IndexRequest indexRequest = new IndexRequest("posts", "doc", "1") .source(builder);

Object 键对

IndexRequest indexRequest = new IndexRequest("posts", "doc", "1") .source("user", "kimchy", "postDate", new Date(), "message", "trying out Elasticsearch"); 同步索引 IndexResponse indexResponse = client.index(request); 异步索引

前面已经讲过,异步执行函数需要添加 listener, 而对于 index 而言,这个 listener 的类型就是 ActionListener

client.indexAsync(request, listener);

异步方法执行后会立刻返回,在索引操作执行完成后,ActionListener 就会被回调:

执行成功,调用 onResponse 函数

执行失败,调用 onFailure 函数

ActionListener<IndexResponse> listener = new ActionListener<IndexResponse>() { @Override public void onResponse(IndexResponse indexResponse) { } @Override public void onFailure(Exception e) { } }; IndexResponse

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwpsx.html