当前位置:   article > 正文

Elasticsearch(017):es常见的字段映射类型之嵌套类型(nested)_es 嵌套字段

es 嵌套字段

es中的嵌套类型(nested)

之前在对象类型(object)小节中,我们提到假如需要索引字段是对象数组,而不是对象,这时我们需要使用嵌套数据类型

形如下面的示例数据结构。

{
  "group" : "fans",
  "user" : [ 
    {
      "first" : "John",
      "last" :  "Smith"
    },
    {
      "first" : "Alice",
      "last" :  "White"
    }
  ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

我们可以user属性是一个对象集合。这种结构我们在创建映射时该怎么定义呢?

假如user字段是对象数组字段(嵌套数据类型)

示例如下

#创建映射的参数
PUT example/docs/_mapping
{
    "group": {
        "type": "text"
    },
    "user": {
        "type": "nested"
        "properties": {
            "id": {"type": "keyword"},
            "name": {"type": "text"},
            "age": {"type": "short"}
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

假如数据结构定义好了之后,我们想要新增一个文档(document),该怎么办?

示例如下

PUT example/docs/12313213123
{
    "group": "研发组",
    "user": [
        {
            "id": 1,
            "name": "张三",
            "age": 22
        },
        {
            "id": 2,
            "name": "李四",
            "age": 19
        },
        {
            "id": 3,
            "name": "tom",
            "age": 21        
        }
    ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

假如我们想对嵌套中的username属性进行搜索

示例如下

GET examaple/docs/_search
{
    "query": {
        "nested": {
            "path": "user",
            "query": {
                "bool": {
                    "must": [
                        {
                            "match": {
                                "user.name": "李四"
                            }
                        }
                    ]
                }
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

注意

  1. 由于嵌套文档被索引为单独的文档,因此只能在nested查询。

  2. 为具有100个嵌套字段的文档建立索引实际上是为101个文档建立索引,因为每个嵌套文档都被索引为一个单独的文档。为了防止定义不正确的映射,每个索引可以定义的嵌套字段的数量默认为限制为50


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/456782
推荐阅读
  

闽ICP备14008679号