自学内容网 自学内容网

ElasticSearch JavaRestClient查询之快速入门

查询操作流程概述

Elasticsearch 查询操作大致可以分为两个部分:

  1. 构建并发起请求:这一步主要包括构建请求对象和设置查询参数。
  2. 解析查询结果:获取到查询结果后,如何从中提取出我们关心的数据。



构建并发起请求

在 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 查询请求。查询操作的核心步骤如下:

  1. 构建请求对象:创建 SearchRequest,并设置索引库名。
  2. 构建查询条件:通过 SearchSourceBuilder 配置查询条件、分页、排序等。
  3. 发送请求:使用 client.search 方法发送请求,获取查询结果。
  4. 解析查询结果:从响应中提取 hitstotal,并遍历命中的文档,获取原始数据。

原文地址:https://blog.csdn.net/2301_80093566/article/details/145271787

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!