Есть индекс с полями:
- account_id
- fingerprint
- et c.
Каждая запись может или может не иметь account_id , то же самое с отпечатком пальца . Их необходимо сгруппировать по account_id , попутно добавляя к этим учетным записям - записи с fingerprint , которые присутствуют в записях из указанного c account_id .
Суть задачи - вывести список уникальных записей статистики для известных учетных записей (те, у кого есть account_id + те, у кого его нет, но имеют тот же отпечаток, что и некоторые из записи в этой группе) и неизвестно (те, у кого есть только отпечаток пальца) с разбивкой на страницы.
Пробую так:
'aggs' => [
"items" => [
"composite" => [
"sources" => [
[
'account_id' => [
'terms' => [ 'field' => 'account_id' ],
],
], [
'fingerprint' => [
'terms' => [ 'field' => 'fingerprint' ],
],
]
],
],
"aggs" => [
"hits" => [
"top_hits" => [
"size" => 100
]
]
]
],
]
И примерно так (вот знаю, что код не совсем правильный, только что нашел в истории) :
'collapse' => [
'field' => 'account_id',
'inner_hits' => [ [
'name' => 'accounts',
'size' => 1,
'sort' => [ [ 'timestamp' => 'desc' ] ]
],
[
'name' => 'fingerprints',
'size' => 1,
'sort' => [ [ 'timestamp' => 'desc' ] ]
] ],
"max_concurrent_group_searches" => 4
],