@ange007
Программист, просто программист.

ElasticSearch: Как сгруппировать уникальные записи статистики с пересекающимися полями (аккаунт и fingerprint)?

Собственно есть индекс с полями:
  • account_id
  • fingerprint
  • и т.д.


У каждой записи может как быть account_id так и не быть, то-же самое и с fingerprint.
Необходимо сгруппировать их по account_id попутно добавив к этим аккаунтам - записи с фингерпринтом которые присутствуют у записей с определённого account_id.

Суть задачи - вывод списка уникальных записей статистики по известным аккаунтам (те у кого имеются account_id + те у кого его нет, но есть такой - же fingerprint как у какой-то из записей в данной группе) и по неизвестным (те у кого только fingerprint) с пагинацией.

Пробовал так:
'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 
                ],


И ещё много как, но что-то всё не то.
  • Вопрос задан
  • 43 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы