【高级篇】第6章 Elasticsearch 高级查询与搜索优化

在Elasticsearch的深入应用之旅中,掌握高级查询技巧与优化搜索性能是提升数据处理效率的关键。本章将带你深入探索Elasticsearch的高级查询特性,揭示搜索性能优化的奥秘,以及如何利用高亮与建议API增强用户体验。

6.1 复杂查询

6.1.1 Nested查询

Nested基本概念与用法:

在Elasticsearch中,nested类型是一种特殊的数据类型,用于存储复杂对象数组,使得数组中的每个对象作为一个独立的、完整的文档对待,而非简单地扁平化处理。这意味着,数组内的每个对象都可以拥有自己的元数据,包括独立的评分、分析设置等。这种设计特别适用于那些数组元素之间存在一对一关联关系,且需要单独查询或聚合的情况,比如订单中的商品列表、文章中的评论列表等。

nested查询正是针对这种数据结构设计的,它允许你深入到数组内部,对每个对象单独进行匹配和过滤。与之相对的是普通对象字段上的查询,后者无法区分数组内各对象的独立性。

实际案例:

假设有一个电商网站,其订单索引ecommerce_orders中每个订单文档包含一个名为products的nested字段,记录了订单中所有商品的信息,包括商品ID(product_id)、商品名称(product_name)和购买数量(quantity)。

案例需求: 我们需要找到所有包含商品名称为“MacBook Pro”的订单,并且关心这些订单中具体是哪些商品满足条件。

查询示例:

GET /ecommerce_orders/_search
{"query": {"nested": {"path": "products",  // 指定nested字段的路径"query": {           // nested查询内部的查询条件"match": {"products.product_name": "MacBook Pro"}},"inner_hits": {       // 请求包含匹配nested对象的详细信息"_source": ["products.product_name", "products.quantity"]}}}
}

解析:

  • 查询路径(path): 指定了执行nested查询的字段名称,这里是products
  • 内部查询(query): 使用match查询,针对products.product_name字段查找值为“MacBook Pro”的记录。
  • inner_hits: 这是一个关键选项,它让每个匹配的nested对象在结果中单独列出,展示指定的_source字段,这里我们只关心商品名称和购买数量。

查询结果示例:

{"hits": {"total": {"value": 2, // 假设有两个订单包含"MacBook Pro""relation": "eq"},"hits": [{"_source": {"order_id": "123","products": [// 其他商品省略...{"product_id": "456","product_name": "MacBook Pro","quantity": 1}]},"inner_hits": {"products": [{"_source": {"product_id": "456","product_name": "MacBook Pro","quantity": 1}}]}},// 另一订单信息省略...]}
}

通过这个案例,我们不仅找到了包含特定商品的订单,还通过inner_hits获得了这些订单中具体匹配商品的详细信息,为后续的分析和处理提供了便利。

6.1.2 Parent/Child查询

Parent/Child基本概念与用法:

在Elasticsearch中,Parent/Child关系是一种特殊的文档关系模型,用于表示一对多的关联关系。与Nested

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

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

相关文章

IT设备监控模板:支持多种监控工具和平台的集成和整合

IT设备监控模板管理在支持多种监控工具和平台方面发挥着关键作用,它通过提供统一的配置和管理界面,使运维人员能够灵活地适应和整合不同的监控工具和平台。以下是IT设备监控模板管理如何支持多种监控工具和平台的具体方式: 一、抽象化和标准…

如何使用AI学习一门编程语言?

无论你是软件开发新手还是拥有几十年的丰富经验,总是需要学习新知识。TIOBE Index追踪50种最受欢迎的编程语言,许多生态系统为职业发展和横向转型提供了机会。鉴于现有技术具有的广度,抽空学习一项新技能并有效运用技能可能困难重重。 最近我…

ARCGIS python 裁剪栅格函数 arcpy.management.Clip

ARCGIS python 裁剪栅格函数 arcpy.management.Clip 1 功能 裁剪掉栅格数据集、镶嵌数据集或图像服务图层的一部分。 2 使用情况 基于模板范围提取部分栅格数据集,输出与模板范围相交的所有像素使用以 x 和 y 坐标的最小值和最大值确定的包络矩形或使用输出范围文…

MATLAB-振动问题:单自由度阻尼振动系统受迫振动

一、基本理论 二、MATLAB实现 单自由度阻尼振动系统受迫振动,MATLAB代码如下: clear; clc; close allA 1; psi 0; F0 10; D 20; Rm 0.5; M 1; omega 2; delta Rm / (2*M); omega0 sqrt(D / M); Omega sqrt(omega0^2 - delta^2); Zm Rm i *…

多线程的三种创建方式

继承Thread类的方式进行实现 public class MyThread extends Thread{ Override public void run(){//多线程具体业务逻辑} }在main方法里面创建子类对象,开启线程 public static void main(String[] args) {MyThread t1 new MyThread(); MyThread t2 new MyThrea…

LLM大模型工程师面试经验宝典--基础版(2024.7月最新)

1.简单介绍一下大模型【LLMs】? 大模型:一般指1亿以上参数的模型,但是这个标准一直在升级,目前万亿参数以上的模型也有了。大语言模型(Large Language Model,LLM)是针对语言的大模型。 2.目前主…

基于布雷格曼偏差校正技术的全变分一维时间序列信号降噪方法(MATLAB R2018A)

信号降噪是信号处理的重要步骤之一,目的是提高所获得信号数据的质量,以达到更高的定性和定量分析精度。信号降噪能提升信号处理其他环节的性能和人们对信息识别的准确率,给信号处理工作提供更可靠的保证。信号降噪的难点是降低噪声的同时也会…

69. x 的平方根(简单)

69. x 的平方根 1. 题目描述2.详细题解3.代码实现3.1 Python方法一:逐个遍历方法二:二分查找 3.2 Java 1. 题目描述 题目中转:69. x 的平方根 2.详细题解 不能使用系统内置的函数,寻找某个数(假定为x)的…

网络请求的高效处理:C++ libmicrohttpd库详解

一、libmicrohttpd简介 libmicrohttpd是一个小型的C语言库,用于创建HTTP服务器和客户端。它提供了HTTP 1.1协议的完整实现,包括持久连接、管道化请求、虚拟主机等特性。libmicrohttpd的特点是: 轻量级:易于集成到C或C项目中。跨…

微信好友不小心拉黑了?这样操作,友谊的小船不会翻

在数字化时代,微信已成为我们社交生活的核心,它不仅连接着亲朋好友,更承载着我们的情感与回忆。 然而,情绪波动时,我们可能会一时冲动,将某些好友误送入黑名单。但别担心,今天,就让…

IMU在手语识别中的应用

近期,一款由美国和中国科研团队联合研发的新型的穿戴设备——SignRing,以其独特的IMU(惯性测量单元)技术,为聋哑人士的手语识别带来了革命性的突破。SignRing不仅极大地扩展了手语识别的词汇量,更提高了识别…

二维数组-----螺旋性矩阵输出

题目有点难,ok其实是很难。。。 观察样例输出,不难发现,螺旋数组中元素的递增轨迹为:右右右、下下下、左左左、上上上 简明为:右、下、左、上。可以设开始递增的元素1的位置为(x,y)&#xff0c…

由跨域引发一些思考

由跨域引发一些思考 前言什么是跨域?为什么会产生跨域?跨域场景示例:跨域常见的解决方法:JSONP(JSON with Padding)CORS(Cross-Origin Resource Sharing)document.domain iframeloc…

AutoHotKey自动热键(二)中文版帮助手册下载和自定义一般键盘快捷键

所有的操作其实在开发者手册中已经交待完了,所以我们要使用中文的手册来进行使用 autohotkey1.1.15中文手册下载 好了,为什么有了中文手册,这里还要进行一些具体的介绍呢,就是为了让大家少踩坑,能够快速形成生产力 这里先讲一下自定义快捷键WIN键和ALT键和CTRL键和SHIFT键的组…

智慧的网络爬虫之CSS概述

智慧的网络爬虫之CSS概述 ​ CSS 是“Cascading Style Sheet”的缩写,中文意思为“层叠样式表”,用于描述网页的表现形式。如网页元素的位置、大小、颜色等。css的主要作用是定义网页的样式。 CSS样式 1. 行内样式 行内样式:直接定义在 HT…

深入理解Git:fetch与pull的区别与运用

在Git的版本控制世界中,fetch和pull是两个至关重要的命令,它们都与从远程仓库获取数据有关。然而,这两个命令在功能和用法上却存在着显著的差异。本文将详细解析fetch和pull的区别,以及它们在实际开发中的应用,帮助读者…

Qt 5.14.2+Android环境搭建

1. 安装QT5.14.2的过程中,选中套件(kit) qt for android。 如果已经安装了qt creator但没有安装该套件,可以找到在qt安装目录下的MaintenanceTool.exe,运行该程序添加套件。 2. 安装jdk8,android sdk&…

五分钟了解MQ消息集成

一、MQ消息集成的定义 MQ消息集成是通过消息中间件(Message Queue)实现的一种数据集成方式。它通过将数据发送到中间件中,再从中间件中接收数据,实现不同系统之间的数据交换。在MQ消息集成中,发送者和接收者之间不需要…

vue3.2及以上 父调子的方法defineExpose定义供父调用的方法及属性

1、定义子类LoginForm&#xff1a; function handleLogin(account, token) {console.log(account,token)}defineExpose({handleLogin,}); 2、父类调用子类组件 const loginFormRef ref(); <LoginForm ref"loginFormRef" />loginFormRef.value.handleLogin(…

代码随想录第38天|动态规划

1049. 最后一块石头的重量 II 参考 备注: 当物体容量也等同于价值时, 01背包问题的含义则是利用好最大的背包容量sum/2, 使得结果尽可能的接近或者小于 sum/2 等价: 尽可能的平分成相同的两堆, 其差则为结果, 比如 (abc)-d, (ac)-(bd) , 最终的结果是一堆减去另外一堆的和, 问…