连接

Java API Client 中包含三大重要组件:

  • 客户端API类。 一些为 Elasticsearch API提供强类型数据结构和方法。 由于 Elasticsearch API 非常庞大,所以它会按照功能来进行分组(也可以叫 “命名空间“),每个分组都会有它们特有的客户端类。 Elasticsearch 核心功能会在 ElasticsearchClient 类中实现。

  • JSON对象映射器。 它会将你的应用业务类与一个JSON对象进行映射,这样就能无缝的与 API 客户端进行无缝集成了。

  • 传输层实现。 这是负责处理所有 HTTP 请求的地方。

下面就是创建并连接这三个组件的代码:

// Create the low-level client
RestClient restClient = RestClient.builder(
    new HttpHost("localhost", 9200)).build();

// Create the transport with a Jackson mapper
ElasticsearchTransport transport = new RestClientTransport(
    restClient, new JacksonJsonpMapper());

// And create the API client
ElasticsearchClient client = new ElasticsearchClient(transport);

Java 底层 REST 客户端 这里可以管理身份认证。 有关身份认证的更多配置信息,请参阅 这篇文档

发送第一个请求

下面的代码片中我们会搜索 “product” 索引,并找到 name 匹配 “bicycle” 的所有对象,然后将他们封装为 Product 这个应用业务类返回。

这段代码向我们演示了,如何使用 fluent 函数式构造器,以 DSL 这样的更简洁的方式编写查询语句。 api-conventions.adoc#api-conventions 中对此有更详细的解释。

SearchResponse<Product> search = client.search(s -> s
    .index("products")
    .query(q -> q
        .term(t -> t
            .field("name")
            .value(v -> v.stringValue("bicycle"))
        )),
    Product.class);

for (Hit<Product> hit: search.hits().hits()) {
    processProduct(hit.source());
}