Elasticsearch中的Nested类型详解

一、Nested类型的介绍

Elasticsearch Nested类型是指将一个对象数组作为一个字段进行索引。Nested类型是一种特殊的对象类型,它可以用来存储在嵌套对象中包含的其他对象信息。这个Nested对象可看做是一个嵌套的对象和它的子文档的集合,可以在同一个document中进行索引。

为了使用Nested类型,要使用下面三个步骤:

1、创建一个mapping

2、在该字段上使用Nested类型,并在字段中定义它内部的对象或属性

3、存储和查询数据

{
   "mappings": {
      "properties": {
         "manufacturer": {
            "type": "nested",
            "properties": {
               "name": { "type": "text" },
               "location": { "type": "geo_point" }
            }
         }
      }
   }
}

二、Nested类型的应用场景

Nested类型主要应用于以下两种情况:

1、嵌套的对象具有多个属性,每个属性都需要各自独立地搜索。

2、嵌套的对象通常会作为一个整体来搜索,比如博客文章,具有标题、正文、标签等属性。

在这些情况下,Nested类型都可以发挥出很好的效果。然而,Nested类型也存在一些缺点。Nested类型会在内存中重复保存与其相关的文档,因此在数据压缩时,内存需求量会增加。

三、Nested类型的使用方式

1、创建Mapping

Nested类型必须在索引mapping时,作为一种复合类型进行定义。

PUT nested_test
{
  "mappings": {
    "properties": {
      "name": {"type": "keyword"},
      "age": {"type": "integer"},
      "sex": {"type": "keyword"},
      "notes": {
        "type": "nested",
        "properties": {
          "title": {"type": "text"},
          "content": {"type": "text"},
          "date": {"type": "date"}
        }
      }
    }
  }
}

2、索引文档

Nested类型字段的支持直接给定内部对象的一个数组,配合它的properties实现保存、查询和表达式计算的支持。

PUT /index/_doc/1
{
  "name":"tom",
  "age":18,
  "sex":"male",
  "notes":[
    {
      "title":"note1",
      "content":"hello elasticsearch",
      "date":"2020-01-01"
    },
    {
      "title":"note2",
      "content":"hello nested type",
      "date":"2020-01-02"
    }
  ]
}

3、查询Nested类型

在查询时,Nested类型的字段要进行特殊处理。要查询内部的字段时,必须使用dot notation指明嵌套字段和其属性名称。

GET index/_search
{
  "query": {
    "nested": {
      "path": "notes",
      "query": {
        "bool": {
          "must": [
            {"match": {"notes.title": "note1"}},
            {"range": {"notes.date": {"gt":"2019-12-31"}}}
          ]
        }
      }
    }
  }
}

四、Nested类型的注意事项

1、嵌套字段不能被映射为子文档或其他同级的Object类型。

2、Nested类型内部如果有多个属性,则每个属性都是一个单独的字段。

3、Nested类型不支持聚合查询。

4、嵌套文档必须具备唯一标识。

5、查询时,必须使用Nested类型的嵌套路径。

6、存储和查询数据的性能延迟比较高。

五、总结

本篇文章通过介绍Nested类型的基本信息、使用方式及注意事项,让读者对Nested类型有了一个更深入的了解。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/190305.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-29 22:32
下一篇 2024-11-29 22:32

相关推荐

  • int类型变量的细节与注意事项

    本文将从 int 类型变量的定义、声明、初始化、范围、运算和类型转换等方面,对 int 类型变量进行详细阐述和讲解,帮助读者更好地掌握和应用 int 变量。 一、定义与声明 int…

    编程 2025-04-29
  • Python3定义函数参数类型

    Python是一门动态类型语言,不需要在定义变量时显示的指定变量类型,但是Python3中提供了函数参数类型的声明功能,在函数定义时明确定义参数类型。在函数的形参后面加上冒号(:)…

    编程 2025-04-29
  • Python基本数字类型

    本文将介绍Python中基本数字类型,包括整型、布尔型、浮点型、复数型,并提供相应的代码示例以便读者更好的理解。 一、整型 整型即整数类型,Python中的整型没有大小限制,所以可…

    编程 2025-04-29
  • Python中的Bool类型判断

    本篇文章旨在讲解Python中的Bool类型判断。在Python中,Bool类型是经常使用的一种类型,因此掌握其用法非常重要。 一、True和False 在Python中,True…

    编程 2025-04-29
  • Python函数类型有哪些

    本文将从以下几个方面详细阐述Python函数类型。 一、内置函数 Python的内置函数是指在Python编程语言中提供的可以直接使用的函数,不需要通过导入模块等方式引入。 部分常…

    编程 2025-04-29
  • Python变量类型用法介绍

    Python是一种解释型编程语言,它提供了丰富的数据类型,包括数字、字符串、列表、元组、集合、字典等。Python变量类型的定义是Python程序开发的基础,本文将从以下几个方面对…

    编程 2025-04-28
  • Python中的整数类型int类总览

    本文将从多个方面,对Python中的整数类型int类进行全面介绍和阐述。 一、数据类型及基本操作 在Python中,整数类型的数据类型为int。在Python3.x中,整数类型的范…

    编程 2025-04-28
  • Python查询变量类型的函数

    本文将从多个方面详细阐述Python中查询变量类型的函数,主要包括以下几点: 一、type()函数 type()函数是Python内置的函数,用于查询变量的类型。它的使用非常简单,…

    编程 2025-04-28
  • 为什么Python函数定义中没有对参数指定类型?

    Python是一种强类型语言,也就是说语言本身会强制要求变量的类型。但是在Python函数定义中,却没有要求对参数指定类型。这是为什么呢? 一、简化函数定义 Python语言简单明…

    编程 2025-04-28
  • Python语言列表中的元素类型可以不相同

    Python语言的列表是一种有序的集合,可以包含任意数量和任意类型的Python对象,包括数字、字符串甚至是其他列表对象,这样的特性称为Python语言列表中的元素类型可以不相同。…

    编程 2025-04-28

发表回复

登录后才能评论