Retour en haut des champs en fonction de champ imbriqué sommes dans ElasticSearch

0

La question

Je suis un total ES débutant et je me demande si ce que je veux faire est possible. J'ai la suite d'une viewer index avec le mappage suivant:

"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"},
                },
            },
        }
    }

Je veux comprendre quelles sont les vidéos les plus regardées par emplacement. J'ai donc besoin d'un moyen de résumer l' times_viewed pour chaque viewed_video dans de nombreux viewers, puis le haut de X pour un emplacement donné.

Est-ce possible?

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

La meilleure réponse

0

Solution: Vous aurez besoin d'un à trois niveaux d'agrégation -

  • terme d'agrégation sur le champ d'emplacement
  • imbriquée terme d'agrégation sur visionné la vidéo Id
  • somme d'agrégation sur la fois vues

Toutefois, la durée des agrégations ne peut pas être effectuée sur des champs de texte. Veuillez consulter la note dans la documentation - https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html:

Par défaut, vous ne pouvez pas exécuter les termes de l'agrégation sur un champ de texte. Utiliser un mot-clé sous-champ de la place. Alternativement, vous pouvez activer fielddata sur le champ de texte pour créer des seaux pour le champ de l'analyse des termes. Permettant fielddata peut augmenter de manière significative l'utilisation de la mémoire.

Cela peut vous aider: elasticsearch agrégation des champs de texte de type cartographie

Une fois le problème ci-dessus est fixé, cette requête doit au travail

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

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................