Elasticsearch'teki iç içe geçmiş alan toplamlarına göre en üstteki alanları döndürür

0

Soru

Ben tam bir ES acemiyim ve yapmak istediğim şeyin mümkün olup olmadığını merak ediyorum. Aşağıdakilere sahibim: viewer aşağıdaki eşleme ile dizin:

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

Konuma göre en çok izlenen videoların neler olduğunu bulmak istiyorum. Bu yüzden özetlemek için bir yola ihtiyacım var times_viewed her biri için viewed_video birçok karşısında viewers ve sonra belirli bir konum için en üstteki X'leri alın.

Bu mümkün mü?

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

En iyi cevabı

0

Çözüm: Üç seviyeli bir toplamaya ihtiyacınız olacak -

  • konum alanında terim toplama
  • görüntülenen video kimliklerinde iç içe geçmiş terim toplama
  • görüntülenen sürelere göre toplam toplama

Ancak, terim toplamaları metin alanlarında gerçekleştirilemez. Lütfen belgelerdeki notu kontrol edin - https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html:

Varsayılan olarak, bir metin alanında bir terim toplamasını çalıştıramazsınız. Bunun yerine bir anahtar sözcük alt alanı kullanın. Alternatif olarak, alanın çözümlenen terimleri için kovalar oluşturmak üzere metin alanındaki fielddata'yı etkinleştirebilirsiniz. Fielddata'yı etkinleştirmek bellek kullanımını önemli ölçüde artırabilir.

Bu da yardımcı olabilir: metin türü eşlemeli elasticsearch toplama alanları

Yukarıdaki sorun giderildikten sonra, bu sorgu çalışmalıdır -

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

Diğer dillerde

Bu sayfa diğer dillerde

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