ElasticSearch JavaRestClient查询之快速入门
查询操作流程概述
Elasticsearch 查询操作大致可以分为两个部分:
- 构建并发起请求:这一步主要包括构建请求对象和设置查询参数。
- 解析查询结果:获取到查询结果后,如何从中提取出我们关心的数据。
构建并发起请求
在 Java 中,查询操作的核心步骤是构建请求对象并配置相关的查询参数,然后通过发送请求来获取结果。
1. 创建请求对象
在使用 Java Rest Client 查询 Elasticsearch 时,首先需要创建一个 SearchRequest 对象。该对象对应着我们发送请求时的路径和查询条件。
- SearchRequest 对象用于表示搜索请求。
- 在创建该对象时,我们需要指定索引库名,因为查询请求是基于特定索引库进行的。
// 1.创建request对象
SearchRequest request = new SearchRequest("items");
2. 设置请求体
接下来,我们需要构建请求体,即指定查询条件。请求体通常是一个 JSON 格式的数据,在 Java 中通过 request.source() 来构建。
request.source()
代表整个请求体,包含查询条件(query
)、分页条件(from/size
)、排序条件(sort
)、高亮显示(highlight
)等。
- 通过 query 设置查询条件,比如
query(QueryBuiliders.matchAllQuery())
方法。
例如,通过 QueryBuilders.matchAllQuery()
来构建一个 match all 查询。
// 2.配置request参数
request.source()
.query(QueryBuilders.matchAllQuery());
3. 发送请求
构建完成请求对象和请求体后,我们就可以使用客户端进行请求的发送。
- 发送请求的方法是:
client.search(searchRequest, RequestOptions.DEFAULT)
,返回的是查询结果。
// 3.发送请求
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
返回结果:
查询结果的解析
查询结果返回的格式是一个 JSON 对象,通常包含多个层次的信息。为了从中提取所需的数据,我们需要逐层解析。
1. 解析结果结构
查询结果中包含的主要信息有:
- took:查询消耗的时间
- hits:查询结果的具体内容
我们要从返回的 SearchResponse 对象中获取 hits 部分,即命中的数据。
// 4.解析结果
SearchHits searchHits = response.getHits();
2. 获取总条数
查询结果中的 total 字段表示总命中的文档数。通过 hits.total().value 可以获取到总条数。
// 4.1.总条数
long total = searchHits.getTotalHits().value;
3. 获取命中的数据
查询的结果存储在 hits 数组中,每个元素都是一个命中的文档。我们通过遍历该数组来提取每一条命中的数据。
// 4.2.命中的数据
SearchHit[] hits = searchHits.getHits();
for (SearchHit hit : hits) {
// 4.2.1.获取source结果
String json = hit.getSourceAsString();
// 4.2.2.转为ItemDoc
ItemDoc doc = JSONUtil.toBean(json, ItemDoc.class);
System.out.println("doc = " + doc);
每个 SearchHit 对象都包含一个 source 字段,它是该文档的原始 JSON 数据。我们可以将其转换为 Java 对象(如 ItemDoc
)。
完整示例代码
以下是一个完整的查询操作示例,展示了如何构建请求、发送请求以及解析查询结果。
@Test
void testMatchAll() throws IOException {
// 1.创建request对象
SearchRequest request = new SearchRequest("items");
// 2.配置request参数
request.source()
.query(QueryBuilders.matchAllQuery());
// 3.发送请求
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 4.解析结果
SearchHits searchHits = response.getHits();
// 4.1.总条数
long total = searchHits.getTotalHits().value;
System.out.println("total = " + total);
// 4.2.命中的数据
SearchHit[] hits = searchHits.getHits();
for (SearchHit hit : hits) {
// 4.2.1.获取source结果
String json = hit.getSourceAsString();
// 4.2.2.转为ItemDoc
ItemDoc doc = JSONUtil.toBean(json, ItemDoc.class);
System.out.println("doc = " + doc);
}
}
总结
通过 Java Rest Client,我们可以方便地构建和发送 Elasticsearch 查询请求。查询操作的核心步骤如下:
- 构建请求对象:创建
SearchRequest
,并设置索引库名。 - 构建查询条件:通过
SearchSourceBuilder
配置查询条件、分页、排序等。 - 发送请求:使用
client.search
方法发送请求,获取查询结果。 - 解析查询结果:从响应中提取 hits 和 total,并遍历命中的文档,获取原始数据。
原文地址:https://blog.csdn.net/2301_80093566/article/details/145271787
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!