(Elasticsearch) Как получить последний элемент вложенного поля всех документов, а затем выполнить подгруппы - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть индекс с именем socialmedia , и я пытаюсь создать запросы с этим полем с именем eng (пропущены некоторые ненужные поля)

"id" : "1",
"eng": 
[
{
  "soc_mm_score" : "3",
  "date_updated" : "1520969306",
},
{
  "soc_mm_score" : "1",
  "date_updated" : "1520972191",
},
{
  "soc_mm_score" : "4",
  "date_updated" : "1520937222",
}
]

У меня есть много документов из этого индекса, которые содержат eng вложенное поле, которое также содержит множество "подобъектов"

Теперь моя главная цель состоит в том, что запрос Elasticsearch долженЯ формулирую, чтобы отфильтровать эти вложенные объекты

ШАГ 1
Получить вложенный объект с наибольшим date_updated значением

STEP2
После получения этих вложенных объектов выполните агрегирование sum , чтобы я мог добавить все значения поля soc_mm_score для соответствующего "последнего вложенного объекта"

Я пробовал этот запрос, но, похоже, он не работает

ATTEMPT # 1 (я использую APIasticsearch-php, поэтому, пожалуйста, поверьте моему запросу, чторабота с этим форматом)

'aggs' => [
    'ENG' => [
        'nested' => [
            'path' => 'eng'
        ],
        'aggs' => [
            'FILTER' => [
                'filter' => [
                    'bool' => [
                        'must' => [
                            [
                                // I'm thinking of using max aggregation here
                            ]
                        ]
                    ]
                ]
            ]
            'LATEST' => [
                'top_hits' => [
                    'size' => 1,
                    'sort' => [
                        'eng.date_updated' => [
                            'order' => 'desc'
                        ]
                    ]
                ]
            ]
        ]
    ]
]

PRO / S: он возвращаетисправить вложенный объект CON / S: я не могу выполнить дальнейшие агрегации

Пример вывода
Output 1

Затем я попытался добавить субагрегацию
Output 2

Тогда это вывод Output 3

Есть ли другие способы, которыми я могу это сделать?

Чтобы просмотреть мои идеальные шаги:

  1. Доступ к моему eng вложенному полю
  2. Цель / Фокус на eng вложенному полю
  3. Получить «последний» / самый последний элемент для этого eng вложенного поля (обозначается наибольшим значением его родственного элемента date_updated field)
  4. Теперь, после полученияэти «самые последние» вложенные элементы создают субагрегацию для своих вложенных полей, например: получение суммы soc_like_count или soc_share_count всех самых последних элементов eng field
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...