Percentile ranks aggregation представляет из себя соотношение данных к процентам. Т.е можно использовать для того чтобы узнать какой процент значения встречается в index
.
Работает только с численными значениями.
Например вам нужно узнать равен ли время ответа вашего сайта (response time
) 500 миллисекундам.
GET mylogs/_search
{
"aggs": {
"response_time_ranks": {
"percentile_ranks": {
"field": "FIELD1",
"values": [ 500, 600 ]
}
}
}
}
И допустим на выходе вы получаете
{
...
"aggregations": {
"response_time_ranks": {
"values": {
"500.0": 90.01,
"600.0": 100.0
}
}
}
}
Из вывода видно что около 90% ответов вашего сервера соответствуют 500 мс, но есть около 10% ответ которых превышает 500 мс.
Т.е исходя из примера можно сказать что percentile_ranks ищет что >= первому числу или >= второму числу
.
Keyed
По умолчанию keyed установлен со значением true
. Keyed связывает уникальный строковый ключ с каждым сегментом и возвращает диапазоны в виде хеша, а не массива.
Для того чтобы вернуть в виде массива выставляем keyed в false
.
GET mylogs/_search
{
"aggs": {
"response_time_ranks": {
"percentile_ranks": {
"field": "FIELD1",
"values": [ 500, 600 ],
"keyed": false
}
}
}
}
И получаем массив
{
...
"aggregations": {
"load_time_ranks": {
"values": [
{
"key": 500.0,
"value": 90.01
},
{
"key": 600.0,
"value": 100.0
}
]
}
}
}
Script
Также можно использовать percentile_ranks со script. Например вы можете использовать скрипт для перевода мс в секунды, используя деление на 1000.
GET mylogs/_search
{
"size": 0,
"aggs": {
"response_time_ranks": {
"percentile_ranks": {
"values": [ 500, 600 ],
"script": {
"lang": "painless",
"source": "doc['FIELD1'].value / params.timeUnit",
"params": {
"timeUnit": 1000
}
}
}
}
}
}
Для сохраненного скрипта
GET mylogs/_search
{
"size": 0,
"aggs": {
"response_time_ranks": {
"percentile_ranks": {
"values": [ 500, 600 ],
"script": {
"id": "my_script",
"params": {
"field": "FIELD1"
}
}
}
}
}
Missing
По умолчанию percentile_ranks отбрасывает документы с пустым значением. Чтобы учитывать такое значения можно выставить missing с цифровым значением, которое и будет заменять пустое значение.
GET mylogs/_search
{
"aggs": {
"response_time_ranks": {
"percentile_ranks": {
"field": "FIELD1",
"values": [ 500, 600 ],
"missing": 10
}
}
}
}
Комментарии