Elastic search Aggregations

sebnemgurek
5 min readMar 16, 2023

--

Merhaba Elasticsearch dünyasına hoş geldiniz. Bir Veri Bilimci olarak keşifçi veri analizi kısımda çeşitli sorular sorarak veriyi analiz etmeye çalışıyoruz. Örneğin

· İşlem hacmi bazında en değerli müşterilerim kimler?

· Her ürün kategorisinde kaç ürün var?

Yönelttiğimiz bu soruların cevabını Python ile aggregation yaparak bulmamız çok kolay. Peki bu soruların yanıtını Elastic search aggregation ile yapabilir miyiz? Tabi ki evet ve daha fazlası birliktelik kuralları için de Elastich search i kullanabiliriz.

Elastic search Aggregations

Bir toplama, verilerinizi ölçümler, istatistikler veya diğer analitikler olarak özetler. Aggregations, aşağıdaki gibi soruları yanıtlamanıza yardımcı olur:

· Web sitem için ortalama yükleme süresi nedir?

· İşlem hacmi bazında en değerli müşterilerim kimler?

· Her ürün kategorisinde kaç ürün var?

Elasticsearch, Aggregations üç kategoride düzenlenir:

Bucket: Belgeleri alan değerlerine, aralıklara veya diğer ölçütlere göre bölmeler olarak da adlandırılan gruplar halinde gruplandıran grup toplamaları.

Metric : Alan değerlerinden toplam veya ortalama gibi metrikleri hesaplayan metrik toplamalar.

Pipeline: Belgeler veya alanlar yerine diğer toplamalardan girdi alan ardışık düzen toplamaları.

  1. Bucket aggregations

Belgeleri gruplandırmak için kullanılır. Bucket aggregations, metric aggregations da olduğu gibi metrikleri alanlar üzerinden hesaplamaz, bunun yerine belge demetleri oluşturur. Her bölüm, geçerli bağlamdaki bir belgenin ona “uyup uymadığını” belirleyen bir ölçütle (toplama türüne bağlı olarak) ilişkilendirilir. Demetlerin kendilerine ek olarak, demet toplamaları ayrıca her bir demete “düşen” belge sayısını da hesaplar ve döndürür.

Şimdi en çok kullanılan Bucket toplamalarını inceleyelim.

· Filter aggregation

Belge kümesini bir sorguyla eşleşenlere daraltan tek bir grup toplama.

Örnek:

Bu örnekte ürün kategorisi (belge kümesi) “Women’s Shoes” ile eşleşenleri daraltarak tek bir grup toplamaya yapalım.

Ürün kategorisi “Women’s Shoes” olan ürünlerin ortalama fiyatı 41.52 EUR iken, tüm ürünlerin ortalama fiyatı 34.78 EUR dir.

Demetlerin kendilerine ek olarak, demet toplamaları ayrıca her bir demete “düşen” belge sayısını da hesaplar ve döndürür.

Bu sorgudaki belge sayısı doc_count:1136 dır.

· Filters aggregation

Her bölümün bir sorguyla eşleşen belgeleri içerdiği çok gruplu birleştirme.

Örnek:

Bu örnekte ürün kategorisini kadın ayakkabıları ve erkek ayakkabıları olmak üzere iki bölüme ayıralım. Daha sonra her bölümün ortalama fiyatlarını bulalım.

· Terms aggregation

Demetlerin dinamik olarak oluşturulduğu, benzersiz (unique) değer başına bir tane olmak üzere, çok gruplu değer kaynağına dayalı bir toplama.

Örnek:

Bu örnekte ürün kategorisindeki benzersiz (unique) değerleri bulalım.

Not: Varsayılan olarak, terms aggregation, en fazla belgeye sahip ilk on terimi döndürür.

Peki benzersiz üretici firmalarımızın ismi neler?

Ürün kategorisinde 6 adet değer olduğu için en fazla 10 belge sınırını aşmamış oldu. Fakat üretici firma sayısının 10 dan fazla olduğunu, daha fazla belge sıralayabilmek için başka paremetreler eklememiz gerektiğini söylemeliyim.

· Multi terms aggregation

Demetlerin dinamik olarak oluşturulduğu, benzersiz değer kümesi başına bir tane olmak üzere, çok gruplu değer kaynağına dayalı bir toplama.

Multi terms aggregation ( çoklu terim toplama), terms aggregation a (terim toplama) çok benzer, ancak çoğu durumda terms aggregation dan daha yavaş olacak ve daha fazla bellek tüketecektir. Bu nedenle sürekli olarak aynı alan kümesi kullanılıyorsa, bu alanlar için birleşik bir anahtarı ayrı bir alan olarak indekslemek ve bu alan üzerinde toplama terimlerini kullanmak daha verimli olacaktır.

Multi terms aggregation, bir bileşik anahtar üzerinde bir dizi belgeye veya bir metrik toplamaya göre sıralamanız ve en iyi N sonucu almanız gerektiğinde en kullanışlı olanlardır. Sıralama gerekli değilse ve tüm değerlerin iç içe geçmiş terimler kullanılarak alınması bekleniyorsa veya bileşik toplamalar daha hızlı ve bellek açısından daha verimli bir çözüm olacaktır.

Örnek:

Bu örnekte ürün kategorileri ile üretici firmaları gruplandıralım. Hangi ürün kategorisi hangi firmada yer alıyor bunu analiz edelim.

Peki şimdi terms aggregation ile gelen sonuçlara bakalım.

Bu sorgunun diğer sorgu tipinden farkı birinci alan kümenin altına diğer alan kümeleri listelenmesidir.

· Range aggregation

Kullanıcının, her biri bir grubu temsil eden bir dizi aralık tanımlamasını sağlayan, çok gruplu, değer kaynağına dayalı bir toplama. Toplama işlemi sırasında, her bir belgeden çıkarılan değerler, her bir grup aralığına ve ilgili/eşleşen belgeye göre “bucket”e göre kontrol edilecektir. Bu toplamanın her aralık için başlangıç ​​değerini içerdiğini ve bitiş değerini hariç tuttuğunu unutmayalım.

Örnek:

Bu örnekte “taxful_total_price” ı üç gruba ayıralım. 100.0 EUR nın altında 3669 ürün, 100.0 ile 200.0 EUR (100.0 EUR eşit, 200.0 EUR dahil değil) aralığında 929 ürün, 200.0 EUR üzerinde 77 ürün olduğunu analiz ettik.

Yukarıdaki örnekler için Elastic in kendi örnek veriseti “Sample eCommerce orders” ı kullandım.

--

--