1
- [[ 巢状 -对象]]
2
- == 巢状对象
1
+ ## 嵌套 -对象
2
+ ### 嵌套对象
3
3
4
- 事实上在Elasticsearch中,创建丶删除丶修改一个文档是是原子性的,因此我们可以在一个文档中储存密切关联的实体。
5
- ((("nested objects")))((("objects", "nested"))) 举例来说,我们可以在一个文档中储存一笔订单及其所有内容,或是储存一个Blog文章及其所有回应,藉由传递一个` comments ` 阵列:
4
+ 事实上在Elasticsearch中,创建丶删除丶修改一个文档是是原子性的,因此我们可以在一个文档中储存密切关联的实体。举例来说,我们可以在一个文档中储存一笔订单及其所有内容,或是储存一个Blog文章及其所有回应,藉由传递一个` comments ` 阵列:
6
5
7
- [ source,json]
8
- --------------------------
6
+ ``` json
9
7
PUT /my_index/blogpost/1
10
8
{
11
9
"title" : " Nest eggs" ,
@@ -28,15 +26,14 @@ PUT /my_index/blogpost/1
28
26
}
29
27
]
30
28
}
31
- --------------------------
32
- <1> 如果我们依靠动态映射 <<dynamic-mapping,dynamic mapping>> ,` comments ` 栏位会被自动建立为一个` object ` 栏位。
29
+ ```
30
+ <1> 如果我们依靠动态映射,` comments ` 栏位会被自动建立为一个` object ` 栏位。
33
31
34
32
因为所有内容都在同一个文档中,使搜寻时并不需要连接(join)blog文章与回应,因此搜寻表现更加优异。
35
33
36
34
问题在於以上的文档可能会如下所示的匹配一个搜寻:
37
35
38
- [ source,json]
39
- --------------------------
36
+ ``` json
40
37
GET /_search
41
38
{
42
39
"query" : {
@@ -48,14 +45,12 @@ GET /_search
48
45
}
49
46
}
50
47
}
51
- --------------------------
48
+ ```
52
49
<1> Alice是31岁,而不是28岁!
53
50
54
- 造成跨对象配对的原因如同我们在对象阵列 <<object-arrays >>中所讨论到,在於我们优美结构的JSON文档((("documents")))((("JSON documents")))
55
- 在索引中被扁平化为下方的 键-值形式:
51
+ 造成跨对象配对的原因如同我们在对象阵列中所讨论到,在于我们优美结构的JSON文档在索引中被扁平化为下方的 键-值 形式:
56
52
57
- [ source,json]
58
- --------------------------
53
+ ``` json
59
54
{
60
55
"title" : [ eggs, nest ],
61
56
"body" : [ making, money, work, your ],
@@ -66,17 +61,16 @@ GET /_search
66
61
"comments.stars" : [ 4 , 5 ],
67
62
"comments.date" : [ 2014 -09-01 , 2014-10-22 ]
68
63
}
69
- --------------------------
64
+ ```
70
65
71
66
` Alice ` 与` 31 ` 以及 ` John ` 与` 2014-09-01 ` 之间的关联已经无法挽回的消失了。
72
- 当` object ` 类型的栏位(参考内部对象<< inner-objects >>)用於储存_单一_对象是非常有用的 。
67
+ 当` object ` 类型的栏位用于储存_单一_对象是非常有用的 。
73
68
从搜寻的角度来看,对於排序一个对象阵列来说关联是不需要的东西。
74
69
75
- 这是_巢状对象_被设计来解决的问题 。 藉由映射` commments ` 栏位为` nested ` 类型而不是` object ` 类型,
76
- 每个巢状对象会被索引为一个_隐藏分割文档 _ ,例如:
70
+ 这是_嵌套对象_被设计来解决的问题 。 藉由映射` commments ` 栏位为` nested ` 类型而不是` object ` 类型,
71
+ 每个嵌套对象会被索引为一个_隐藏分割文档 _ ,例如:
77
72
78
- [ source,json]
79
- --------------------------
73
+ ``` json
80
74
{ <1>
81
75
"comments.name" : [ john, smith ],
82
76
"comments.comment" : [ article, great ],
@@ -96,16 +90,16 @@ GET /_search
96
90
"body" : [ making, money, work, your ],
97
91
"tags" : [ cash, shares ]
98
92
}
99
- --------------------------
100
- <1> 第一个` 巢状 ` 对象
101
- <2> 第二个` 巢状 ` 对象
102
- <3> _ 根_或是父文档
93
+ ```
94
+ <1> 第一个` 嵌套 ` 对象
95
+ <2> 第二个` 嵌套 ` 对象
96
+ <3> 根或是父文档
103
97
104
- 藉由分别索引每个巢状对象 ,对象的栏位中保持了其关联。 我们的查询可以只在同一个巢状对象都匹配时才回应 。
98
+ 藉由分别索引每个嵌套对象 ,对象的栏位中保持了其关联。 我们的查询可以只在同一个嵌套对象都匹配时才回应 。
105
99
106
- 不仅如此,因巢状对象都被索引了,连接巢状对象至根文档的查询速度非常快 --几乎与查询单一文档一样快。
100
+ 不仅如此,因嵌套对象都被索引了,连接嵌套对象至根文档的查询速度非常快 --几乎与查询单一文档一样快。
107
101
108
- 这些额外的巢状对象被隐藏起来 ,我们无法直接访问他们。 为了要新增丶修改或移除一个巢状对象 ,我们必须重新索引整个文档。
109
- 要牢记搜寻要求的结果并不是只有巢状对象 ,而是整个文档。
102
+ 这些额外的嵌套对象被隐藏起来 ,我们无法直接访问他们。 为了要新增丶修改或移除一个嵌套对象 ,我们必须重新索引整个文档。
103
+ 要牢记搜寻要求的结果并不是只有嵌套对象 ,而是整个文档。
110
104
111
105
0 commit comments