ElasticSearch JavaRestClient查询之快速入门

文章目录

      • 查询操作流程概述
      • 构建并发起请求
          • 1. 创建请求对象
          • 2. 设置请求体
          • 3. 发送请求
      • 查询结果的解析
          • 1. 解析结果结构
          • 2. 获取总条数
          • 3. 获取命中的数据
      • 完整示例代码
      • 总结

查询操作流程概述

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.转为ItemDocItemDoc 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.转为ItemDocItemDoc doc = JSONUtil.toBean(json, ItemDoc.class);System.out.println("doc = " + doc);}
}



总结

通过 Java Rest Client,我们可以方便地构建和发送 Elasticsearch 查询请求。查询操作的核心步骤如下:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/893562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Quartus:开发使用及 Tips 总结

Quartus是Altera(现已被Intel收购)推出的一款针对其FPGA产品的综合性开发环境,用于设计、仿真和调试数字电路。以下是使用Quartus的一些总结和技巧(Tips),帮助更高效地进行FPGA项目开发: 这里写目录标题 使用总结TIPS…

elementUI Table组件实现表头吸顶效果

需求描述 当 table 内容过多的时候,页面上滑滚动,表头的信息也会随着被遮挡,无法将表头信息和表格内容对应起来,需要进行表头吸顶 开始编码💪 环境:vue2.6、element UI step1: 给el-table__h…

用于牙科的多任务视频增强

Multi-task Video Enhancement for Dental Interventions 2022 miccai Abstract 微型照相机牢牢地固定在牙科手机上,这样牙医就可以持续地监测保守牙科手术的进展情况。但视频辅助牙科干预中的视频增强减轻了低光、噪音、模糊和相机握手等降低视觉舒适度的问题。…

Vue3轮播图左右联动

1、轮播图部分,右边鼠标移入,左边对应展示轮播图 可以在swiper 官网 Swiper中文网-轮播图幻灯片js插件,H5页面前端开发 选择vue中使用swiper npm i swiper 左右两边的联动:左边的轮播图和右边的小的列表他们的列表组成结构是一样的&#…

windows下本地部署安装hadoop+scala+spark-【不需要虚拟机】

注意版本依赖【本实验版本如下】 Hadoop 3.1.1 spark 2.3.2 scala 2.11 1.依赖环境 1.1 java 安装java并配置环境变量【如果未安装搜索其他教程】 环境验证如下: C:\Users\wangning>java -version java version "1.8.0_261" Java(TM) SE Runti…

go-zero框架基本配置和错误码封装

文章目录 加载配置信息配置 env加载.env文件配置servicecontext 查询数据生成model文件执行查询操作 错误码封装配置拦截器错误码封装 接上一篇:《go-zero框架快速入门》 加载配置信息 配置 env 在项目根目录下新增 .env 文件,可以配置当前读取哪个环…

2025 最新flutter面试总结

目录 1.Dart是值传递还是引用传递? 2.Flutter 是单引擎还是双引擎 3. StatelessWidget 和 StatefulWidget 在 Flutter 中有什么区别? 4.简述Dart语音特性 5. Navigator 是什么?在 Flutter 中 Routes 是什么? 6、Dart 是不是…

HarmonyOS Next构建工具 lycium 原理介绍

HarmonyOS Next构建工具 lycium 原理介绍 背景介绍 HarmonyOS Next中很多系统API是以C接口提供,如果要使用C接口,必须要使用NAPI在ArkTS与C间交互,这种场景在使用DevEco-Studio中集成的交叉编译工具,以及cmake构建工具就完全够用…

【远程视频必备】Briefing:安全视频群聊让远程办公无忧

文章目录 前言1.关于briefing2.本地部署briefing3.使用briefing4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定briefing公网地址 前言 对于有远程办公或者身处异地与家人好友视频聊天需求的人来说,在享受高效沟通的同时,也或多或少会有对信息泄…

热更新杂乱记

热更新主要有一个文件的MD5值的比对过程,期间遇到2个问题,解决起来花费了一点时间 1. png 和 plist 生成zip的时候再生成MD5值会发生变动。 这个问题解决起来有2种方案: (1).第一个方案是将 png和plist的文件时间改…

Elementor Pro 3.27 汉化版 2100套模板 安装教程 wordpress主题中文编辑器插件免费下载

插件下载地址 https://a5.org.cn/a5ziyuan/732506.html 转载请注明出处! Elementor Pro 是流行的 Elementor 的付费扩展 WordPress 页面构建器插件. 它为免费的 Elementor 插件添加了许多附加功能和增强功能,使其成为创建美丽的更强大的工具 WordPress 网站。 如果…

计算机工程:解锁未来科技之门!

计算机工程与应用是一个充满无限可能性的领域。随着科技的迅猛发展,计算机技术已经深深渗透到我们生活的方方面面,从医疗、金融到教育,无一不在彰显着计算机工程的巨大魅力和潜力。 在医疗行业,计算机技术的应用尤为突出。比如&a…

AT8870单通道直流电机驱动芯片

AT8870单通道直流电机驱动芯片 典型应用原理图 描述 AT8870是一款刷式直流电机驱动器,适用于打印机、电器、工业设备以及其他小型机器。两个逻辑输入控制H桥驱动器,该驱动器由四个N-MOS组成,能够以高达3.6A的峰值电流双向控制电机。利用电流…

Vue2.0+ElementUI实现查询条件展开和收起功能组件

一、需求 el-form如果查询条件过多,影响页面的展示效果。查询条件表单是我们系统中非常常见的功能,我们需要把它封装成一个通用的组件,方便在系统开发中提升开发效率。除了在实现基本查询条件的功能上,还需要实现多条件的折叠和展…

Scrapy之一个item包含多级页面的处理方案

目标 在实际开发过程中,我们所需要的数据往往需要通过多个页面的数据汇总得到,通过列表获取到的数据只有简单的介绍。站在Scrapy框架的角度来看,实际上就是考虑如何处理一个item包含多级页面数据的问题。本文将以获取叶子猪网站的手游排行榜及…

MySQL8【学习笔记】

第一章前提须知 1.1 需要学什么 Dbeaver 的基本使用SQL 语句:最重要的就是查询(在实战的时候,你会发现我们做的绝大部分工作就是 “查询”)MySQL 存储过程(利用数据库底层提供的语言,去进行业务逻辑的封装…

【JVM】垃圾收集器详解

你将学到 1. Serial 收集器 2. ParNew 收集器 3. Parallel Scavenge 收集器 4. Serial Old 收集器 5. Parallel Old 收集器 6. CMS 收集器 7. G1 收集器 在 Java 中,垃圾回收(GC)是自动管理内存的一个重要机制。HotSpot JVM 提供了多种…

SOME/IP服务接口

本系列文章将分享我在学习 SOME/IP 过程中积累的一些感悟,并结合 SOME/IP 的理论知识进行讲解。主要内容是对相关知识的梳理,并结合实际代码展示 SOME/IP 的使用,旨在自我复习并与大家交流。文中引用了一些例图,但由于未能找到原作…

编写0号中断的处理程序

实验内容、程序清单及运行结果 编写0号中断的处理程序(课本实验12) 解: assume cs:code code segment start: mov ax,cs mov ds,ax mov si,offset do mov ax,0 mov es,ax mov di,200h mov cx,offset doend-offset do ;安装中断例…

Android系统开发(十五):从 60Hz 到 120Hz,多刷新率进化简史

引言 欢迎来到“帧率探索实验室”!今天,我们要聊聊 Android 11 中对多种刷新率设备的支持。你可能会问:“这和我写代码有什么关系?”别急,高刷新率不仅仅让屏幕更顺滑,还会直接影响用户体验。想象一下&…