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
}
]
}
假如我們想對嵌套中的user
的name
屬性進行搜索
示例如下
GET examaple/docs/_search
{
"query": {
"nested": {
"path": "user",
"query": {
"bool": {
"must": [
{
"match": {
"user.name": "李四"
}
}
]
}
}
}
}
}
注意
-
由於嵌套文檔被索引爲單獨的文檔,因此只能在nested查詢。
-
爲具有100個嵌套字段的文檔建立索引實際上是爲101個文檔建立索引,因爲每個嵌套文檔都被索引爲一個單獨的文檔。爲了防止定義不正確的映射,每個索引可以定義的嵌套字段的數量默認爲限制爲50。