elasticsearch 使用嵌套类型

在 Elasticsearch (ES) 中,嵌套类型(nested type)是一个特殊的复合类型,用于存储结构化的复杂对象,这些对象可以包含多个字段。使用嵌套类型的增、删、改、查操作与普通的字段操作相似,但由于嵌套类型具有层次结构,因此在查询时需要特别注意。

下面是如何在 Elasticsearch 中使用嵌套类型的增、删、改、查操作:

1. 创建索引并定义嵌套类型

首先,我们需要创建一个索引,并在映射中定义一个嵌套类型字段。假设我们有一个文档,其中包含一个嵌套的“address”字段,表示一个人可能有多个地址。

PUT /people
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "age": {
        "type": "integer"
      },
      "addresses": {
        "type": "nested",  // 嵌套类型
        "properties": {
          "city": {
            "type": "text"
          },
          "zipcode": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

2. 增加文档(Indexing)

添加一个文档时,嵌套的字段可以作为数组来传入。

POST /people/_doc/1
{
  "name": "John Doe",
  "age": 30,
  "addresses": [
    { "city": "New York", "zipcode": "10001" },
    { "city": "San Francisco", "zipcode": "94105" }
  ]
}

3. 查找文档(Search)

要查询嵌套字段中的数据,需要使用 nested 查询类型,并使用 nested_path 指定嵌套字段的路径。

查询所有地址是 “New York” 的人:
POST /people/_search
{
  "query": {
    "nested": {
      "path": "addresses",
      "query": {
        "bool": {
          "must": [
            { "match": { "addresses.city": "New York" } }
          ]
        }
      }
    }
  }
}
查询地址中包含 “zipcode” 为 “94105” 的人:
POST /people/_search
{
  "query": {
    "nested": {
      "path": "addresses",
      "query": {
        "term": { "addresses.zipcode": "94105" }
      }
    }
  }
}

4. 更新文档(Update)

更新嵌套类型的字段时,需要特别注意,因为 Elasticsearch 不支持直接修改嵌套数组中的单个元素。一般方法是使用 scripted_upsert 或先删除整个嵌套数组再重新添加。

示例:更新嵌套字段中的 “city”(例如,将地址 “New York” 的城市改为 “Los Angeles”):
POST /people/_update/1
{
  "script": {
    "source": """
      for (int i = 0; i < ctx._source.addresses.size(); i++) {
        if (ctx._source.addresses[i].city == 'New York') {
          ctx._source.addresses[i].city = 'Los Angeles';
        }
      }
    """
  }
}

5. 删除文档(Delete)

删除嵌套字段中的某个元素时,可以使用 script 来过滤删除,或完全删除文档后重新添加。

示例:删除 addresses 中城市为 “San Francisco” 的地址:
POST /people/_update/1
{
  "script": {
    "source": """
      ctx._source.addresses.removeIf(addr -> addr.city == 'San Francisco');
    """
  }
}

6. 删除文档(Delete by ID)

删除整个文档时,不需要关心嵌套字段,直接删除即可:

DELETE /people/_doc/1

7. 使用 Nested 聚合(Aggregation)

嵌套类型也可以用于聚合操作,以下是一个对嵌套字段进行聚合的例子。

示例:聚合所有城市的数量:
POST /people/_search
{
  "aggs": {
    "cities": {
      "nested": {
        "path": "addresses"
      },
      "aggs": {
        "city_count": {
          "terms": {
            "field": "addresses.zipcode"
          }
        }
      }
    }
  }
}

总结

在 Elasticsearch 中,嵌套类型允许你对结构化数据进行高效的存储和查询,但由于嵌套字段在查询时会被当作独立文档来处理,因此需要特别关注查询和更新的语法。通过 nested 查询和聚合,可以精确地定位和分析嵌套数据,而在更新和删除时,则通常需要通过脚本来操作嵌套字段。

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

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

相关文章

项目二十三:电阻测量(需要简单的外围检测电路,将电阻转换为电压)测量100,1k,4.7k,10k,20k的电阻阻值,由数码管显示。要求测试误差 <10%

资料查找&#xff1a; 01 方案选择 使用单片机测量电阻有多种方法&#xff0c;以下是一些常见的方法及其原理&#xff1a; 串联分压法&#xff08;ADC&#xff09; 原理&#xff1a;根据串联电路的分压原理&#xff0c;通过测量已知电阻和待测电阻上的电压&#xff0c;计算出…

ST-Linker V2 烧录器详解说明文档

目录 ST-Linker v2烧录器介绍 STM8烧录口 STM32烧录接口 JTAG烧录接口 ​​​​​​​ ​​​​​​​ ​​​​​​​ 编写不易&#xff0c;仅供学习&#xff0c;请勿搬运&#xff0c;感谢理解 ST-Linker v2烧录器介绍 图片中是两种IC芯片的烧录器&#x…

在Centos7上安装MySQL数据库 How to install MySQL on Centos 7

执行以下命令&#xff0c;下载并安装MySQL。 wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm && yum -y install mysql57-community-release-el7-10.noarch.rpm && yum install -y mysql-community-server --nogpgcheck执行以下…

FireFox火狐浏览器企业策略禁止更新

一直在用火狐浏览器&#xff0c;但是经常提示更新&#xff0c;进入浏览器右上角就弹出提示&#xff0c;比较烦。多方寻找&#xff0c;一直没有找到合适的方案&#xff0c;毕竟官方没有给出禁用检查更新的选项&#xff0c;甚至about:config里都没有。 最终找到了通过企业策略控…

【Qt】按钮类控件:QPushButton、QRadioButton、QCheckBox、ToolButton

目录 QPushButton 例子&#xff1a; QRadioButton 例子&#xff1a; 按钮的常见信号函数 单选按钮分组 例子&#xff1a; QCheckButton 例子&#xff1a; QToolButton QWidget的常见属性及其功能对于它的派生类控件都是有效的(也就是Qt中的各种控件)&#xff0c;包括…

SpringBoot3 升级介绍

优质博文&#xff1a;IT-BLOG-CN 一、项目背景 截止2023.05.18&#xff0c;springboot发布了最新版本3.1.0。而在我们开发项目中&#xff0c;springboot一直使用的是1.5.8版本(相差6年的维护更新)。版本差距较大&#xff0c;很多新功能未能得到使用。例如近几年Loom的兴起&am…

运筹说 第130期 | 对策论引言

通过对对策论基础知识进行梳理和总结&#xff0c;小编绘制了《对策论思维导图》&#xff0c;如下图所示&#xff0c;对策论章节一共包含4个小节。 第1小节是对策论引言。介绍了对策论的基本概念&#xff0c;包含对策行为和对策论、对策现象的三要素、对策问题举例及对策的分类…

Windows 与 Linux 下 Ping IPv6 地址 | 常用网络命令

注&#xff1a;本文为网络命令相关文章合辑。 未整理去重。 一、IPv6 概述 IPv6 即 “Internet 协议版本 6”&#xff0c;因 IPv4 地址资源面临耗尽问题而被引入以替代 IPv4。IPv6 则提供了理论上多达 2 128 2^{128} 2128 个地址&#xff0c;有效解决地址不足困境。 IPv6 具…

密码学——密码学概述、分类、加密技术(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 密码学 大数据…

Android Studio、JDK、AGP、Gradle、kotlin-gradle-plugin 兼容性问题

文章目录 问题&#xff1a;解决办法&#xff1a;gradle与 java的版本兼容AGP与Gradle的版本兼容kotlin 与 jvm 的版本兼容KGP、Gradle、AGP兼容关系kotlin 与 java 的编译版本配置 问题&#xff1a; 你从githb上clone了一个项目&#xff0c;本地跑的时候&#xff0c;各种报错。…

ChatGPT搜索全新升级,向全体用户开放,近屿智能助力AI行业发展

12月17日&#xff0c;OpenAI在第八天直播中正式宣布ChatGPT搜索功能全面升级&#xff0c;并即日起对所有ChatGPT用户开放。此次更新不仅带来了显著的性能提升&#xff0c;还引入了多项突破性功能&#xff0c;如更快的搜索速度、全新的地图体验以及YouTube视频嵌入&#xff0c;为…

VSCode编辑+GCC for ARM交叉编译工具链+CMake构建+OpenOCD调试(基于STM32的标准库/HAL库)

本文以【STM32F103ZET6】单片机作为示例来进行演示&#xff0c;标准库/HAL库的工程是通用的&#xff0c;修改CMakeLists.txt里面的源文件和头文件引用部分即可。 更多细节请参考【VSCode编辑GCC for ARM交叉编译工具链Makefile构建OpenOCD调试&#xff08;基于STM32的标准库&am…

ResNet网络:深度学习中的革命性架构

目录 ​编辑 引言 ResNet网络的特点 1. 残差块&#xff08;Residual Block&#xff09; 2. 恒等映射&#xff08;Identity Mapping&#xff09; 3. 深层网络训练 4. Batch Normalization 5. 全局平均池化 6. 灵活的结构 ResNet的应用案例 ResNet的研究进展 实战案例…

Axure9设置画布固定

在使用AxureRP9设计原型时&#xff0c;如果遇到画布在拖动时变得难以控制&#xff0c;可以尝试在Windows系统中通过‘文件’>‘首选项’&#xff0c;或在Mac系统中通过‘AxureRP9’>‘偏好设置’进行设置&#xff0c;以稳定画布的行为。 现象 页面底层的画布&#xff0…

景联文科技入选中国信通院发布的“人工智能数据标注产业图谱”

近日&#xff0c;由中国信息通信研究院、中国人工智能产业发展联盟牵头&#xff0c;联合中国电信集团、沈阳市数据局、保定高新区等70多家单位编制完成并发布《人工智能数据标注产业图谱》。景联文科技作为人工智能产业关键环节的代表企业&#xff0c;入选图谱中技术服务板块。…

ESlint代码规范,手动与自动修复

规范说明 规则参考 - ESLint - 插件化的 JavaScript 代码检查工具 规范说明 ​ ​ 可看到是main.js文件报错分别是第三行第30个字符&#xff0c;以及第七行第一个字符 后面则是规范说明&#xff0c;可以根据说明查找相应的规范 一.手动修正 ctrl f 可以搜索 二.自动修正 …

一条线上的点

给你一个数组 points &#xff0c;其中 points[i] [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。 提示&#xff1a; 1 < points.length < 300points[i].length 2-104 < xi, yi < 104points 中的所有点 互不相同 解析&#xff1a;使用斜…

wxpython图形用户界面编程

wxpython图形用户界面编程 一、wxpython的基础 1.1 wxpython的基础 作为图形用户界面开发工具包 wxPython&#xff0c;主要提供了如下 GUI 内容&#xff1a; 窗口。控件。事件处理。布局管理。 1.2 wxpython的类层次机构 1.3 wxpython的安装 Windows 和 macOS 平台安装&a…

【优选算法篇】位运算小课堂:从入门到精通的奇妙之旅(上篇)

文章目录 须知 &#x1f4ac; 欢迎讨论&#xff1a;如果你在学习过程中有任何问题或想法&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习。你的支持是我继续创作的动力&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;觉得这篇文章对你有帮助吗&#xff1…

pytest入门九:feature

fixture是pytest特有的功能&#xff0c;用以在测试执行前和执行后进行必要的准备和清理工作。使用pytest.fixture标识&#xff0c;定义在函数前面。在你编写测试函数的时候&#xff0c;你可以将此函数名称做为传入参数&#xff0c;pytest将会以依赖注入方式&#xff0c;将该函数…