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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章