ElasticSearch 使用详解:Java Elastics

2021-12-29  本文已影响0人  you的日常

ES 也提供了 Java 的接口。Java 是目前非常火爆流行的语言,本课时将主要介绍如何使用 ES 的 Java 接口,对 ES 进行操作,我们将对 Java Rest Client 的 Java High Level Rest Client 作为开发工具进行介绍。

我使用 IDEA 社区版作为开发工具,创建了一个 Spring Boot 项目。创建细节这里不过多介绍。

Maven 依赖

Maven 是个非常好用的包管理器工具,在 pom.xml 添加下面的 Maven 依赖,就可以将 ES 客户端引入到现在的开发环境中:

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

配置连接客户端

配置好 IP 地址与端口号,连接成功后,需要手动地关闭连接:

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

JSON 定义方式

直接在开发中写 JSON 字符串感觉比较 low,我个人喜欢两种方式定义 JSON 对象——Map 和 XContentBuilder。Map 的方式定义起来确实很方便,而且可读性也很高;但是如果需要嵌套的关系就显得非常麻烦,特别是定义 DSL 的时候,多层嵌套聚合用 Map 表达起来就很繁琐。

Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("user", "kimchy");
jsonMap.put("postDate", new Date());
jsonMap.put("message", "trying out Elasticsearch");

因此我更中意 XContentBuilder,一个 ES 定义的 JSON helper 类。用这个 helper 类,感觉就是在定义 JSON,嵌套表达起来也合理。后面将会使用 XContentBuilder 来作为数据对象或者 DSL 的 JSON 定义工具。

XContentBuilder builder = jsonBuilder()
        .startObject()
        .field("user", "kimchy").endObject()
        .field("postDate", new Date())
        .field("message", "trying out Elasticsearch")
        .endObject().humanReadable(true);
String s = Strings.toString(builder);

Index 操作

Java 中封装了 IndexRequest 类,专门用来索引操作,先定义一个 JSON 对象,向 ES 中插入。

定义文档 ID,将 builder 或者 Map 数据放到 source 中,这里的 source 与 ES 中的 _source 字段含义差不多,指定 _source 里面会有哪些字段。定义好文档的 type 类型为 _doc,索引定义为 java_client。索引操作所需要的定义都已经包装到 IndexRequest 里面了,但是 IndexRequest 并不能发起请求,实际上它只是对请求索引操作的一个数据包装,真正 HTTP 请求 ES 的还是 client 对象。

IndexRequest indexRequest = new IndexRequest()
        .id("1").source(builder);

indexRequest.type("_doc");
indexRequest.index("java_client");

上一篇下一篇

猜你喜欢

热点阅读