【高级篇】第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.mfbz.cn/a/761793.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【开放词汇分割】Side Adapter Network for Open-Vocabulary Semantic Segmentation

论文链接:Side Adapter Network for Open-Vocabulary Semantic Segmentation 代码链接:https://github.com/MendelXu/SAN 作者:Mengde Xu,Zheng Zhang,Fangyun Wei,Han Hu,Xiang Bai 发表单位:华中科技大学、微软亚洲研究院 会…

python(6)numpy的使用详细讲解

在numpy中,最基本的数据结构是数组,因此我们首先需要了解如何创建一个数组。numpy提供了多种数组创建方法,包括从列表或元组创建、从文件中读取数据、使用特定函数创建等。下面是一些常用的创建方法: 一、创建数组 1. 从列表或元…

CesiumJS【Basic】- #037 绘制轮廓线(Entity方式)

文章目录 绘制轮廓线(Entity方式)1 目标2 代码2.1 main.ts绘制轮廓线(Entity方式) 1 目标 使用Entity方式绘制轮廓线 2 代码 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium.Viewer(<

10月开始,所有新来日本的外国人都必须加入公共年金体系!

为了吸引更多外国人来日本工作并为他们提供更好的养老保障&#xff0c;日本厚生劳动省最近宣布了一项新政策。 从今年10月开始&#xff0c;所有新来日本的外国人都必须加入公共年金体系。 虽然之前已经有这个要求&#xff0c;但还是有不少人没加入。 因此&#xff0c;日本年金机…

Excel保存时弹出“请注意,您的文档的部分内容可能包含文档检查器无法删除的个人信息”

前言 Excel保存时弹出“请注意&#xff0c;您的文档的部分内容可能包含文档检查器无法删除的个人信息”&#xff0c;本节会介绍如何查看无法删除的个人信息是什么&#xff0c;以及如何关闭该提示窗口 一、关闭弹窗提醒 1、点击文件 – 选项 2、点击选择信任中心 – 信任中心…

烟台网站建设前需要了解哪些

在进行烟台网站建设之前&#xff0c;需要了解以下几个重要的方面&#xff1a; 1. 目标和定位&#xff1a;在建设网站之前&#xff0c;需要明确网站的目标和定位。是为了展示公司业务&#xff0c;还是为了销售产品&#xff0c;或者是为了提供信息和服务等。根据不同的目标和定位…

Soul打造安全社交元宇宙环境,全力守护用户线上社交安全

在数字化时代的浪潮中,智能安全线上社交正成为人们日常生活中的重要组成部分。随着人们对社交媒体和在线平台依赖程度的不断增加,保障个人信息安全和网络安全变得至关重要。在此背景下,社交平台致力于采取多种措施来保障用户的隐私安全,提升社交体验的质量和安全性。而Soul全方…

程序员日志之DNF手游55级版本全职业攻略

目录 传送门正文日志1、概要2、异界套和遗迹悲鸣套坑3、全职业攻略鬼剑士-狂战士鬼剑士-鬼泣鬼剑士-剑魂鬼剑士-阿修罗格斗家-散打格斗家-气功师神枪手-漫游枪手神枪手-枪炮师魔法师-元素师魔法师-魔道学者圣职者-圣骑士 传送门 SpringMVC的源码解析&#xff08;精品&#xff…

黄子韬徐艺洋领证传闻引热议

黄子韬徐艺洋领证传闻引热议&#xff0c;经纪人火速辟谣&#xff1a;谣言止于智者7月1日&#xff0c;娱乐圈再度掀起一阵波澜&#xff0c;一则关于黄子韬与徐艺洋疑似领证的传闻迅速席卷网络&#xff0c;引发了无数粉丝和网友的关注和讨论。然而&#xff0c;在短短几个小时内&a…

Python从0到100(三十四):Python中的urllib模块使用指南

1. urllib模块概述 在Python中&#xff0c;除了广泛使用的requests模块之外&#xff0c;urllib模块也是处理HTTP请求的重要工具。urllib模块在Python 2中分为urllib和urllib2两个模块&#xff0c;而在Python 3中&#xff0c;它们被合并为一个urllib模块。本文将重点介绍Python…

数据恢复:移动硬盘数据恢复全攻略

一、移动硬盘数据恢复概述 在数字化时代&#xff0c;数据已成为我们生活中不可或缺的一部分。移动硬盘作为便携式存储设备&#xff0c;因其大容量、高便携性和稳定性而广受欢迎。然而&#xff0c;在使用过程中&#xff0c;我们可能会遇到数据丢失的问题&#xff0c;这可能是由…

Python 算法交易实验75 QTV200后续想法梳理

说明 在第一步获取数据源&#xff0c;然后进入Mongo(第一个数据节点)开始&#xff0c;QTV200的数据流体系就开始动了。后续用多少时间完成不太好确定&#xff0c;短则数周&#xff0c;长则数月。毕竟有过第一版实验的基础&#xff0c;应该还是可以做到的。 下面就是天马行空&…

CentOS中使用SSH远程登录

CentOS中使用SSH远程登录 准备工作SSH概述SSH服务的安装与启动建立SSH连接SSH配置文件修改SSH默认端口SSH文件传输 准备工作 两台安装CentOS系统的虚拟机 客户机&#xff08;192.168.239.128&#xff09; 服务器&#xff08;192.168.239.129&#xff09; SSH概述 Secure S…

Python基础之多进程

文章目录 1 多进程1.1 简介1.2 Linux下多进程1.3 multiprocessing1.4 Pool1.5 进程间通信1.6 分布式进程 1 多进程 1.1 简介 要让Python程序实现多进程&#xff08;multiprocessing&#xff09;&#xff0c;我们先了解操作系统的相关知识。 Unix/Linux操作系统提供了一个fork…

如何在本地一键配置最强国产大模型

自从OpenAI的ChatGPT横空出世以来&#xff0c;国内外各类大语言模型&#xff08;LLM&#xff09;层出不穷&#xff0c;其中不乏Google的Gemini、Claude、文心一言等等。相较于竞争激烈的商业模型赛道&#xff0c;以Llama为代表的开源大模型的进步速度也十分惊人。 伴随着大语言…

ANSYS新能源汽车动力电池仿真应用案例

燃料电池是一种非燃烧过程的电化学能转换装置&#xff0c;将氢气&#xff08;等燃料&#xff09;和氧气的化学能连续不断地转换为电能&#xff0c;是发电设备而非储能设备。 根据电解质的不同&#xff0c;分为碱性燃料电池AFC、磷酸燃料电池PAFC、熔融碳酸盐燃料电池MCFC、固体…

微机原理 复习

第一章导论 1.3 冯诺依曼体系结构 &#xff08;1&#xff09;以二进制形式表示指令和数据 &#xff08;2&#xff09;程序和数据事先放在存储器中&#xff08;预存储&#xff09; &#xff08;3&#xff09;由运算器、控制器、输入设备和输出设备五大部件组成 字长、主频…

css实现一个三角形

实现不用方向的三角形可根据border进行设置。具体代码如下&#xff1a; .triangle-up {width: 0;height: 0;border-top: 10px solid transparent;border-left: 10px solid transparent;border-right: 10px solid transparent;border-bottom: 10px solid black;}.triangle-rig…

6-14题连接 - 高频 SQL 50 题基础版

目录 1. 相关知识点2. 例子2.6. 使用唯一标识码替换员工ID2.7- 产品销售分析 I2.8 - 进店却未进行过交易的顾客2.9 - 上升的温度2.10 - 每台机器的进程平均运行时间2.11- 员工奖金2.12-学生们参加各科测试的次数2.13-至少有5名直接下属的经理2.14 - 确认率 1. 相关知识点 left …

Redis Cluster 模式 的具体实施细节是什么样的?

概述 参考&#xff1a;What are Redis Cluster and How to setup Redis Cluster locally ? | by Rajat Pachauri | Medium Redis Cluster 的工作原理是将数据分布在多个节点上&#xff0c;同时确保高可用性和容错能力。以下是 Redis Cluster 运行方式的简要概述&#xff1a; …