Skip to content

Commit 0683c90

Browse files
authored
REST tests for normalize agg (#89629)
This adds a REST test for the normalize pipeline agg so we have backwards compatibility tests for it.
1 parent 8fd9c5a commit 0683c90

File tree

2 files changed

+229
-10
lines changed

2 files changed

+229
-10
lines changed

docs/reference/aggregations/pipeline/normalize-aggregation.asciidoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ _mean_::
7272

7373
[4.63, 4.63, 9.63, 49.63, 9.63, 9.63, 19.63]
7474

75-
_zscore_::
75+
_z-score_::
7676
This method normalizes such that each value represents how far it is from the mean relative to the standard deviation
7777

7878
x' = (x - mean_x) / stdev_x

x-pack/plugin/src/yamlRestTest/resources/rest-api-spec/test/analytics/normalize.yml

Lines changed: 228 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,32 +48,251 @@ setup:
4848
user: "d"
4949

5050
---
51-
"Basic Search":
51+
rescale_0_1:
52+
- skip:
53+
features: close_to
54+
55+
- do:
56+
search:
57+
index: foo
58+
body:
59+
size: 0
60+
aggs:
61+
users_by_day:
62+
date_histogram:
63+
field: timestamp
64+
calendar_interval: day
65+
aggs:
66+
percent_of_total_users:
67+
normalize:
68+
buckets_path: _count
69+
method: rescale_0_1
70+
71+
- length: { aggregations.users_by_day.buckets: 3 }
72+
- match: { aggregations.users_by_day.buckets.0.key_as_string: "2017-01-01T00:00:00.000Z" }
73+
- match: { aggregations.users_by_day.buckets.0.doc_count: 3 }
74+
- close_to: { aggregations.users_by_day.buckets.0.percent_of_total_users.value: { value: 1.0, error: 0.05 } }
75+
- match: { aggregations.users_by_day.buckets.1.key_as_string: "2017-01-02T00:00:00.000Z" }
76+
- match: { aggregations.users_by_day.buckets.1.doc_count: 2 }
77+
- close_to: { aggregations.users_by_day.buckets.1.percent_of_total_users.value: { value: 0.5, error: 0.05 }}
78+
- match: { aggregations.users_by_day.buckets.2.key_as_string: "2017-01-03T00:00:00.000Z" }
79+
- match: { aggregations.users_by_day.buckets.2.doc_count: 1 }
80+
- close_to: { aggregations.users_by_day.buckets.2.percent_of_total_users.value: { value: 0.0, error: 0.05 }}
81+
82+
---
83+
rescale_0_100:
84+
- skip:
85+
features: close_to
86+
87+
- do:
88+
search:
89+
index: foo
90+
body:
91+
size: 0
92+
aggs:
93+
users_by_day:
94+
date_histogram:
95+
field: timestamp
96+
calendar_interval: day
97+
aggs:
98+
percent_of_total_users:
99+
normalize:
100+
buckets_path: _count
101+
method: rescale_0_100
102+
103+
- length: { aggregations.users_by_day.buckets: 3 }
104+
- match: { aggregations.users_by_day.buckets.0.key_as_string: "2017-01-01T00:00:00.000Z" }
105+
- match: { aggregations.users_by_day.buckets.0.doc_count: 3 }
106+
- close_to: { aggregations.users_by_day.buckets.0.percent_of_total_users.value: { value: 100, error: 0.5 }}
107+
- match: { aggregations.users_by_day.buckets.1.key_as_string: "2017-01-02T00:00:00.000Z" }
108+
- match: { aggregations.users_by_day.buckets.1.doc_count: 2 }
109+
- close_to: { aggregations.users_by_day.buckets.1.percent_of_total_users.value: { value: 50, error: 0.5 }}
110+
- match: { aggregations.users_by_day.buckets.2.key_as_string: "2017-01-03T00:00:00.000Z" }
111+
- match: { aggregations.users_by_day.buckets.2.doc_count: 1 }
112+
- close_to: { aggregations.users_by_day.buckets.2.percent_of_total_users.value: { value: 0, error: 0.5 }}
113+
114+
---
115+
percent_of_sum:
116+
- skip:
117+
features: close_to
118+
119+
- do:
120+
search:
121+
index: foo
122+
body:
123+
size: 0
124+
aggs:
125+
users_by_day:
126+
date_histogram:
127+
field: timestamp
128+
calendar_interval: day
129+
aggs:
130+
percent_of_total_users:
131+
normalize:
132+
buckets_path: _count
133+
method: percent_of_sum
134+
135+
- length: { aggregations.users_by_day.buckets: 3 }
136+
- match: { aggregations.users_by_day.buckets.0.key_as_string: "2017-01-01T00:00:00.000Z" }
137+
- match: { aggregations.users_by_day.buckets.0.doc_count: 3 }
138+
- close_to: { aggregations.users_by_day.buckets.0.percent_of_total_users.value: { value: 0.5, error: 0.05 }}
139+
- match: { aggregations.users_by_day.buckets.1.key_as_string: "2017-01-02T00:00:00.000Z" }
140+
- match: { aggregations.users_by_day.buckets.1.doc_count: 2 }
141+
- close_to: { aggregations.users_by_day.buckets.1.percent_of_total_users.value: { value: 0.3, error: 0.05 }}
142+
- match: { aggregations.users_by_day.buckets.2.key_as_string: "2017-01-03T00:00:00.000Z" }
143+
- match: { aggregations.users_by_day.buckets.2.doc_count: 1 }
144+
- close_to: { aggregations.users_by_day.buckets.2.percent_of_total_users.value: { value: 0.2, error: 0.05 }}
145+
146+
---
147+
mean:
148+
- skip:
149+
features: close_to
150+
151+
- do:
152+
search:
153+
index: foo
154+
body:
155+
size: 0
156+
aggs:
157+
users_by_day:
158+
date_histogram:
159+
field: timestamp
160+
calendar_interval: day
161+
aggs:
162+
percent_of_total_users:
163+
normalize:
164+
buckets_path: _count
165+
method: mean
166+
167+
- length: { aggregations.users_by_day.buckets: 3 }
168+
- match: { aggregations.users_by_day.buckets.0.key_as_string: "2017-01-01T00:00:00.000Z" }
169+
- match: { aggregations.users_by_day.buckets.0.doc_count: 3 }
170+
- close_to: { aggregations.users_by_day.buckets.0.percent_of_total_users.value: { value: 0.5, error: 0.05 }}
171+
- match: { aggregations.users_by_day.buckets.1.key_as_string: "2017-01-02T00:00:00.000Z" }
172+
- match: { aggregations.users_by_day.buckets.1.doc_count: 2 }
173+
- close_to: { aggregations.users_by_day.buckets.1.percent_of_total_users.value: { value: 0.0, error: 0.05 }}
174+
- match: { aggregations.users_by_day.buckets.2.key_as_string: "2017-01-03T00:00:00.000Z" }
175+
- match: { aggregations.users_by_day.buckets.2.doc_count: 1 }
176+
- close_to: { aggregations.users_by_day.buckets.2.percent_of_total_users.value: { value: -0.5, error: 0.05 }}
177+
178+
---
179+
zscore:
180+
- skip:
181+
features: close_to
52182

53183
- do:
54184
search:
55-
index: "foo"
185+
index: foo
56186
body:
57187
size: 0
58188
aggs:
59189
users_by_day:
60190
date_histogram:
61-
field: "timestamp"
62-
calendar_interval: "day"
191+
field: timestamp
192+
calendar_interval: day
63193
aggs:
64194
percent_of_total_users:
65195
normalize:
66-
buckets_path: "_count"
67-
method: "percent_of_sum"
196+
buckets_path: _count
197+
method: z-score
68198

69199
- length: { aggregations.users_by_day.buckets: 3 }
70200
- match: { aggregations.users_by_day.buckets.0.key_as_string: "2017-01-01T00:00:00.000Z" }
71201
- match: { aggregations.users_by_day.buckets.0.doc_count: 3 }
72-
- match: { aggregations.users_by_day.buckets.0.percent_of_total_users.value: 0.5 }
202+
- close_to: { aggregations.users_by_day.buckets.0.percent_of_total_users.value: { value: 1.2, error: 0.05 }}
73203
- match: { aggregations.users_by_day.buckets.1.key_as_string: "2017-01-02T00:00:00.000Z" }
74204
- match: { aggregations.users_by_day.buckets.1.doc_count: 2 }
75-
- match: { aggregations.users_by_day.buckets.1.percent_of_total_users.value: 0.3333333333333333 }
205+
- close_to: { aggregations.users_by_day.buckets.1.percent_of_total_users.value: { value: 0.0, error: 0.05 }}
76206
- match: { aggregations.users_by_day.buckets.2.key_as_string: "2017-01-03T00:00:00.000Z" }
77207
- match: { aggregations.users_by_day.buckets.2.doc_count: 1 }
78-
- match: { aggregations.users_by_day.buckets.2.percent_of_total_users.value: 0.16666666666666666 }
208+
- close_to: { aggregations.users_by_day.buckets.2.percent_of_total_users.value: { value: -1.22, error: 0.05 }}
209+
210+
---
211+
softmax:
212+
- skip:
213+
features: close_to
79214

215+
- do:
216+
search:
217+
index: foo
218+
body:
219+
size: 0
220+
aggs:
221+
users_by_day:
222+
date_histogram:
223+
field: timestamp
224+
calendar_interval: day
225+
aggs:
226+
percent_of_total_users:
227+
normalize:
228+
buckets_path: _count
229+
method: softmax
230+
231+
- length: { aggregations.users_by_day.buckets: 3 }
232+
- match: { aggregations.users_by_day.buckets.0.key_as_string: "2017-01-01T00:00:00.000Z" }
233+
- match: { aggregations.users_by_day.buckets.0.doc_count: 3 }
234+
- close_to: { aggregations.users_by_day.buckets.0.percent_of_total_users.value: { value: 0.67, error: 0.05 }}
235+
- match: { aggregations.users_by_day.buckets.1.key_as_string: "2017-01-02T00:00:00.000Z" }
236+
- match: { aggregations.users_by_day.buckets.1.doc_count: 2 }
237+
- close_to: { aggregations.users_by_day.buckets.1.percent_of_total_users.value: { value: 0.24, error: 0.05 }}
238+
- match: { aggregations.users_by_day.buckets.2.key_as_string: "2017-01-03T00:00:00.000Z" }
239+
- match: { aggregations.users_by_day.buckets.2.doc_count: 1 }
240+
- close_to: { aggregations.users_by_day.buckets.2.percent_of_total_users.value: { value: 0.09, error: 0.05 }}
241+
242+
---
243+
format:
244+
- skip:
245+
features: close_to
246+
247+
- do:
248+
search:
249+
index: foo
250+
body:
251+
size: 0
252+
aggs:
253+
users_by_day:
254+
date_histogram:
255+
field: timestamp
256+
calendar_interval: day
257+
aggs:
258+
percent_of_total_users:
259+
normalize:
260+
buckets_path: _count
261+
method: percent_of_sum
262+
format: 00.00%
263+
264+
- length: { aggregations.users_by_day.buckets: 3 }
265+
- match: { aggregations.users_by_day.buckets.0.key_as_string: "2017-01-01T00:00:00.000Z" }
266+
- match: { aggregations.users_by_day.buckets.0.doc_count: 3 }
267+
- close_to: { aggregations.users_by_day.buckets.0.percent_of_total_users.value: { value: 0.5, error: 0.05 }}
268+
- match: { aggregations.users_by_day.buckets.0.percent_of_total_users.value_as_string: 50.00% }
269+
- match: { aggregations.users_by_day.buckets.1.key_as_string: "2017-01-02T00:00:00.000Z" }
270+
- match: { aggregations.users_by_day.buckets.1.doc_count: 2 }
271+
- close_to: { aggregations.users_by_day.buckets.1.percent_of_total_users.value: { value: 0.3, error: 0.05 }}
272+
- match: { aggregations.users_by_day.buckets.1.percent_of_total_users.value_as_string: 33.33% }
273+
- match: { aggregations.users_by_day.buckets.2.key_as_string: "2017-01-03T00:00:00.000Z" }
274+
- match: { aggregations.users_by_day.buckets.2.doc_count: 1 }
275+
- close_to: { aggregations.users_by_day.buckets.2.percent_of_total_users.value: { value: 0.2, error: 0.05 }}
276+
- match: { aggregations.users_by_day.buckets.2.percent_of_total_users.value_as_string: 16.67% }
277+
278+
---
279+
bad path:
280+
- skip:
281+
features: close_to
282+
283+
- do:
284+
catch: /No aggregation found for path \[badpath\]/
285+
search:
286+
index: foo
287+
body:
288+
size: 0
289+
aggs:
290+
users_by_day:
291+
date_histogram:
292+
field: timestamp
293+
calendar_interval: day
294+
aggs:
295+
percent_of_total_users:
296+
normalize:
297+
buckets_path: badpath
298+
method: rescale_0_1

0 commit comments

Comments
 (0)