множественная группа вasticsearch, включая пропущенные значения

Я пытаюсь сделать группу вasticsearch, несколькими полями. Я знаю, что вложенная агрегация существует, но я хочу включить в определенную группу запись, для которой поле, по которому я группирую, пусто.

Скажем, у нас есть такая структура данных:

SONG_ID | SONG_GENRE | SONG_ARTIST

и я хочу группировать по жанрам, художники.
Я хотел бы иметь группу для каждой возможной комбинации, т.е.

Группа по жанрам дает мне 5 групп (если жанров 5) плюс корзину, в которой находятся песни без жанра. группировка по артисту дает мне для каждого жанра ведро по артистам плюс одно с песнями без артиста.

По сути, я хотел бы получить те же результаты, что и при использовании группы. Это вообще возможно?

0

Решение

Вы можете подойти по-разному, чтобы решить ваши потребности.

Простейшим способом было бы индексировать фиксированное значение, скажем, «не упомянутое», по отношению к genre поле songs если жанра нету. Вы можете сделать это во время индексации или путем определения «null_value» в вашем отображении поля.

"SONG_GENRE": {"type": "string", "null_value": "notmentioned"},
"SONG_ARTIST": {"type": "string", "null_value": "notmentioned"},

Таким образом, во время агрегации (вложенной) вы автоматически найдете количество «не упомянутых» для песен, не имеющих жанра.

Другой подход заключается в использовании отсутствующего фильтра в качестве другой агрегации наряду с обычной агрегацией. Что-то вроде ниже.

{
"aggs": {
"SONG_GENRE": {
"terms": {
"field": "SONG_GENRE"},
"aggs": {
"SONG_ARTIST": {
"terms": {
"field": "SONG_ARTIST"}
},
"MISSING_SONG_ARTIST": {
"filter": {
"missing": {
"field": "SONG_ARTIST"}
}
}
}
},
"MISSING_SONG_GENRE": {
"filter": {
"missing": {
"field": "SONG_GENRE"}
},
"aggs": {
"MISSING_SONG_GENRE_SONG_ARTIST": {
"terms": {
"field": "SONG_ARTIST"}
},
"MISSING_SONG_GENRE_MISSING_SONG_ARTIST": {
"filter": {
"missing": {
"field": "SONG_ARTIST"}
}
}
}
}
}
}

Я не проверил синтаксис. Это просто чтобы дать вам идею

Другим способом взлома может быть обработка пропущенного количества (общее количество попаданий — все показатели агрегации) как значения против жанра.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]