Возвращайте верхние поля на основе сумм вложенных полей в ElasticSearch

0

Вопрос

Я полный новичок в ES, и мне интересно, возможно ли вообще то, что я хочу сделать. У меня есть следующее viewer индекс со следующим сопоставлением:

"mappings": {
        "properties": {
            "id": {"type": "text"},
            "name": {"type": "text"},
            "location": {"type": "text"},
            "viewed_videos": { //array of all the videos a viewer saw and their view counts
                "type": "nested",
                "properties": {
                    "id": {"type": "text"},
                    "name": {"type": "text"},
                    "description": {"type": "text"},
                    "times_viewed": {"type": "long"},
                },
            },
        }
    }

Я хочу выяснить, какие видео наиболее просматриваются по местоположению. Поэтому мне нужен способ подвести итоги times_viewed для каждого viewed_video во многих viewers, а затем получите верхние X для данного местоположения.

Возможно ли это?

elasticsearch
2021-11-19 18:58:29
1

Лучший ответ

0

Решение: Вам понадобится трехуровневая агрегация -

  • поле агрегация терминов по местоположению
  • агрегирование вложенных терминов по просмотренным идентификаторам видео
  • суммирование по просмотренному времени

Однако агрегирование терминов не может выполняться в текстовых полях. Пожалуйста, проверьте примечание в документации - https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html:

По умолчанию вы не можете запустить агрегацию терминов в текстовом поле. Вместо этого используйте подполе ключевого слова. Кроме того, вы можете включить fielddata в текстовом поле для создания сегментов для анализируемых терминов поля. Включение fielddata может значительно увеличить использование памяти.

Это также может помочь: поля агрегации elasticsearch с сопоставлением типов текста

Как только вышеуказанная проблема будет устранена, этот запрос должен работать -

GET viewer/_search
{
  "size": 0,
  "aggs": {
    "location": {
      "terms": {
        "field": "location"
      },
      "aggs": {
        "videos": {
          "nested": {
            "path": "viewed_videos"
          },
          "aggs": {
             "type": {
               "terms": {
                    "field": "viewed_videos.id"
                },
                "aggs": {
                  "count": {
                    "sum": {
                      "field": "viewed_videos.times_viewed"
                    }
                  },
                  "sorted_count": {
                    "bucket_sort": {
                      "sort": [
                        { "count": { "order": "desc" } } 
                      ],
                      "size": <X> // top X results                            
                    }
                  }
                } 
              }
            }
          }
       }
    }
  }
}
2021-11-20 08:11:05

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

Популярное в этой категории

Популярные вопросы в этой категории