连接
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());
}