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

es中的嵌套类型(nested)

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

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

{
  "group" : "fans",
  "user" : [ 
    {
      "first" : "John",
      "last" :  "Smith"
    },
    {
      "first" : "Alice",
      "last" :  "White"
    }
  ]
}

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

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

示例如下

#创建映射的参数
PUT example/docs/_mapping
{
    "group": {
        "type": "text"
    },
    "user": {
        "type": "nested"
        "properties": {
            "id": {"type": "keyword"},
            "name": {"type": "text"},
            "age": {"type": "short"}
        }
    }
}

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

示例如下

PUT example/docs/12313213123
{
    "group": "研发组",
    "user": [
        {
            "id": 1,
            "name": "张三",
            "age": 22
        },
        {
            "id": 2,
            "name": "李四",
            "age": 19
        },
        {
            "id": 3,
            "name": "tom",
            "age": 21        
        }
    ]
}

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

示例如下

GET examaple/docs/_search
{
    "query": {
        "nested": {
            "path": "user",
            "query": {
                "bool": {
                    "must": [
                        {
                            "match": {
                                "user.name": "李四"
                            }
                        }
                    ]
                }
            }
        }
    }
}

注意

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

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


发布了164 篇原创文章 · 获赞 166 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/weixin_39723544/article/details/104595557