ElasticSearch - RestClient查询文档

news2024/11/13 10:22:07

目录

查询文档-快速入门

查询文档-match查询

查询文档-精确查询

查询文档-布尔查询

查询文档-排序和分页

查询文档-高亮显示


  • 查询文档-快速入门

  • 文档的查询基本步骤包括:
    • (1)准备Request对象
    • (2)准备请求参数,构建查询条件
    • (3)发起请求,得到结果
    • (4)解析结果(参考JSON结果,从外到内,逐层解析)
  • 以match_all查询为例
  • 发起查询请求,解析响应
  • 代码解读:
    • 第一步,创建SearchRequest对象,指定索引库名
    • 第二步,利用request.source()构建DSL,DSL中可以包含查询、分页、排序、高亮等
    • query():代表查询条件,利用QueryBuilders.matchAllQuery()构建一个match_all查询的DSL
    • 第三步,利用client.search()发送请求,得到响应
  • 这里关键的API有两个:
  • 一个是request.source(),其中包含了查询、排序、分页、高亮等所有功能
  • 另一个是QueryBuilders,其中包含match、term、function_score、bool等各种查询
  • elasticsearch返回的结果是一个JSON字符串,结构包含:
    • hits:命中的结果
    • total:总条数,其中的value是具体的总条数值
    • max_score:所有结果中得分最高的文档的相关性算分
    • hits:搜索结果的文档数组,其中的每个文档都是一个json对象
    • _source:文档中的原始数据,也是json对象
  • 因此,解析响应结果,就是逐层解析JSON字符串,流程如下:
    • SearchHits:通过response.getHits()获取,就是JSON中的最外层的hits,代表命中的结果
    • SearchHits#getTotalHits().value:获取总条数信息
    • SearchHits#getHits():获取SearchHit数组,也就是文档数组
    • SearchHit#getSourceAsString():获取文档结果中的_source,也就是原始的json文档数据
  • 查询文档-match查询

  • 全文检索的match和multi_match查询与match_all的API基本一致
  • 差别是查询条件,也就是query的部分

  • 因此,Java代码上的差异主要是request.source().query()中的参数
  • 同样是利用QueryBuilders提供的方法
  • 查询文档-精确查询

  • 精确查询主要是两者:
    • term:词条精确匹配
    • range:范围查询
  • 与之前的查询相比,差异同样在查询条件,其它都一样
  • 查询文档-布尔查询

  • 布尔查询是用must、must_not、filter等方式组合其它查询

  • 查询文档-排序和分页

  • 搜索结果的排序和分页是与query同级的参数
  • 因此同样是使用request.source()来设置

  • 查询文档-高亮显示

  • 高亮的代码与之前代码差异较大,有两点:
    • 查询的DSL:其中除了查询条件,还需要添加高亮条件,同样是与query同级
    • 结果解析:结果除了要解析_source文档数据,还要解析高亮结果
  • 高亮请求构建

  • 高亮结果解析
  • 高亮的结果与查询的文档结果默认是分离的,并不在一起
  • 因此解析高亮的代码需要额外处理
  • 代码解读:
    • 第一步:从结果中获取source;hit.getSourceAsString(),这部分是非高亮结果,json字符串;还需要反序列为HotelDoc对象
    • 第二步:获取高亮结果;hit.getHighlightFields(),返回值是一个Map,key是高亮字段名称,值是HighlightField对象,代表高亮值
    • 第三步:从map中根据高亮字段名称,获取高亮字段值对象HighlightField
    • 第四步:从HighlightField中获取Fragments,并且转为字符串;这部分就是真正的高亮字符串了
    • 第五步:用高亮的结果替换HotelDoc中的非高亮结果

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

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

相关文章

OpenSSL下载安装教程

OpenSSL下载 (加急)下载地址:Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 首先,进入官网 Shining Light Productions - Home ,可以看到如下界面: 这里演示用的版本是V1.1的版…

nodejs+vue考研信息查询系统vscode项目

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 2 第3章 系统分析 3 3.1 需求分析 3 3.2 系统可行性分析 4 3.2.1技术可行性:技术背景 4 3.2.2经…

2023蓝桥杯学习与刷题建议

前两天天给你们组了队,经过两天发现各位都有这样的问题: 不愿意交流。小组不会规划刷题计划。可能是因为没有人带头和具体刷题计划,所以都处于迷茫,不交流、不刷题。还有可能是大家都不认识,都比较羞涩。同时也有我个…

OSCP_VULHUB_DC: 2

文章目录前言信息收集Web账号密码爆破ssh登录绕过rbash限制git提权前言 kali攻击:192.168.132.139 目标主机:192.168.132.146 环境配置参照https://www.vulnhub.com/entry/dc-2,311/ 下载:https://download.vulnhub.com/dc/DC-2.zip 信息收…

开发第四天+第五天读书笔记

首先用C语言实现内存写入: 光是成功的让画面黑屏是不够的,还是要往画面上画点什么。首先修改naskfunc.nas。写成这样: ; naskfunc ; TAB4[FORMAT "WCOFF"] ; 创建对象文件的模式 [INSTRSET "i486p"] …

Linux进程间通信(基于管道通信)

目录 一、进程间通信 1.1 通信目的 1.2 通信发展 二、管道 2.1 管道的概念和分类 2.2 匿名管道 2.2.1 匿名管道(基于父子血缘关系) 2.2.2 匿名管道单向性 2.2.3 匿名管道是内存级别文件 2.2.4 匿名管道指令实现 2.2.5 代码实现匿名管道(pipe()…

一文讲清楚shell 中的变量是怎么回事

目录 变量和引用 一, 什么是变量 二, 根据数据类型分类 三, 根据作用域分类 1、环境变量 2、普通变量 四, 变量的定义 1、变量定义示例:变量名变量值 2、位置参数和预定义变量 五, shell中的引用 六&…

【GPLT 二阶题目集】L2-022 重排链表

输入格式: 每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (≤10^5 )。结点的地址是5位非负整数,NULL地址用−1表示。 接下来有N行,每行格式为: Address Data Next 其中Addres…

深拷贝和浅拷贝对比

JavaScript存储引用数据(对象)都是存地址的,存放在堆内存中的对象,在栈内存中存的是一个指针,这个指针指向堆内存一个位置。再从堆内存中取得所需的数据。 深拷贝:对数据进行拷贝之后,修改拷贝之…

Python:从协议到抽象基类

本章话题是接口:鸭子类型代表特征动态协议; 使接口更明确、能验证实现是否副了规定的抽象基类ABC(Abstact Base Class).Python语言诞生15年后,Python2.6中才引入了抽象基类,抽象基类。对于java、C#类似的语言,会觉得鸭…

DevSecOps敏捷安全技术金字塔V3.0正式发布

2022年12月28日,由悬镜安全主办,3S-Lab软件供应链安全实验室、Linux基金会OpenChain社区、ISC、OpenSCA社区联合协办的第二届全球DevSecOps敏捷安全大会(DSO 2022)已通过全球直播的形式圆满举行。本届大会以“共生敏捷进化”为主题…

HTB_Markup_xml注入读ssh私钥进程注入

文章目录信息收集xml注入ssh 私钥连接提权信息收集 使用如下参数可以探测具体版本,只使用-sV -v无此效果 nmap -sC -A -Pn 10.129.95.192是个登录页面 弱口令,只有admin-password成功登录 几个页面,只有order.php页面可以与后端交互并传递x…

【Kubernetes 企业项目实战】06、基于 Jenkins+K8s 构建 DevOps 自动化运维管理平台(中)

目录 一、基于 Jenkinsk8sGitDocker Hub 等技术链构建企业级 DevOps 容器云平台 1.1 安装 Jenkins 1.1.1 安装 nfs 服务 1.1.2 在 kubernetes 中部署 jenkins 1.2 配置 Jenkins ​1.2.1 获取管理员密码 1.2.2 安装插件 1.2.3 创建第一个管理员用户 1.3 测试 jenkins 的…

VMware Workstation中安装Kali 2022

VMware Workstation中安装Kali 2022 前言 开工了,笔记本中的相关工具该更新了,今天记录一下。 首先记录的是在VMware Workstation中安装kali,这个过程比较简单。 我只是想扩充一下自己的博客,另外可以给入门人员一个参考。 下载…

react的JSX语法

1.jsx基本使用 1 createElement() 的问题 繁琐不简洁。不直观,无法一眼看出所描述的结构。不优雅,用户体验不爽。 2 JSX 简介 JSX 是 JavaScript XML 的简写,表示在 JavaScript 代码中写 XML(HTML) 格式的代码。 优…

通信原理笔记—增量调制(∆M)

目录 概述: 简单增量调制(∆M)原理: 编码器与解码器 简单△M的过载问题: 增量总和(∆-Σ)调制 数字压扩自适应增量调制: 不同编码调制方式的误码性能分析: 概述: 最简单的DPCM是增量调制&#xff0c…

layui框架学习(4:导航)

layui官网教程采用html中的无序列表和定义列表来实现导航样式(文章最后还有个关于导航所用元素的补充说明),主要包括水平导航、垂直/侧边导航,同时还支持用span和a元素实现面包屑导航样式。导航功能需要加载element模块&#xff0…

实验二:Linux主机漏洞利⽤攻击实践

(一)实验简介 实验所属系列:windows主机漏洞利用攻击实践 实验对象:本科/专科信息安全专业 相关课程:渗透测试 实验时数(学分):2学时 实验类别:实践类 (二&a…

如何集中式管理多个客户端节点传输任务-镭速

在一些生产制造企业或it部门,它们的生产机器设备每天都会有大量的生产数据,并且需要人为地对这些数据进行迁移或者归档备份到其他存储。这样重复性的操作,无疑大大提高了人工成本,而且运作起来的效率也不高。 镭速服务器集中式任务…

MySQL优化方案

一、MySQL 的优化方案有哪些?MySQL 数据库常见的优化手段分为三个层面:SQL 和索引优化、数据库结构优化、系统硬件优化等,每个大的方向中又包含多个小的优化点。1.SQL 和索引优化通过优化 SQL 语句以及索引来提高 MySQL 数据库的运行效率① 使…