У меня есть массив строк в одно поле «strArray»:Возврат только один элемент из массива строк в elasticsearch
strArray: ['browser:IE', 'device:PC', 'country:USA', 'state:CA']
мне нужно сделать агрегирование браузером (устройства, страны или государства). Это не проблема, если я знаю порядок этих значений в поле strArray.
я мог бы использовать эти структуры:
"aggs": {
"deviceAggs": {
"terms": {
"script": "doc['strArray'][1]"
}
}
}
Но проблема в том, что порядок введения этих строк могут быть разными.
Как это сделать? Я думаю о нескольких способах:
Scripting - использовать функцию как подстроку и получить только «правильные» значения.
Фильтрация - возможно отфильтровать одно значение (которое содержит строку «устройство:») из массива.
Сортировка значений strArray для размещения всех значений в определенном порядке, но «сортировка» дает мне странный результат - возвращает только один элемент (без фильтрации).
Не спрашивайте меня, почему у меня есть эта структура (это не мой выбор), если у нас есть структурный ключ: значение - у нас не было бы проблем.
Я думаю о сортировке массива, чтобы получить предсказуемый порядок элементов. – Val
@Val Я уже проверил это - «сортировать» - дайте мне странный результат. Обновленный вопрос – yAnTar