Tüm Ürünler
Search
Belge Merkezi

Tablestore:Aggregation

Son Güncelleme:Oct 02, 2026

Tablestore Java SDK'yi kullanarak arama dizini sorgu sonuçları üzerinde ölçüm hesaplayabilir veya bu sonuçları gruplayabilirsiniz. Histogramlar, iç içe geçmiş gruplamalar ve gruplardaki en üst satırlar gibi yöntemleri kullanabilirsiniz.

Önkoşullar

Tablestore Java SDK paketini yükleyin ve bir istemci başlatın.

Çalışma Mantığı

Arama dizini sorgusu tamamlandıktan sonra toplama işlemi, eşleşen tüm satırlar için ölçümler hesaplar veya satırları gruplar. Ölçüm toplamaları, alanların minimum, maksimum, toplam, ortalama, sayı, farklı değer sayısı veya yüzdeliklerini hesaplar. Gruplamalar ise satırları alan değerlerine, birden fazla alana, sayısal aralıklara, coğrafi mesafelere, filtrelere, sayısal aralıklara (histogram), tarih aralıklarına veya coğrafi ızgaralara göre gruplar. Bir grubun içinde ayrıca ölçüm toplamaları veya alt gruplamalar da tanımlayabilirsiniz.


Kategori


Yapılandırma Türü


Açıklama


Ölçüm Toplaması


MinAggregation


Bir alanın minimum değerini döndürür; SQL'deki MIN işlevine benzer.


Ölçüm Toplaması


MaxAggregation


Bir alanın maksimum değerini döndürür; SQL'deki MAX işlevine benzer.


Ölçüm Toplaması


SumAggregation


Sayısal bir alanın toplamını döndürür; SQL'deki SUM işlevine benzer.


Ölçüm Toplaması


AvgAggregation


Bir alanın ortalama değerini döndürür; SQL'deki AVG işlevine benzer.


Ölçüm Toplaması


CountAggregation


Belirtilen bir alanda değeri olan satır sayısını döndürür; SQL'deki COUNT(field) işlevine benzer.


Ölçüm Toplaması


DistinctCountAggregation


Bir alandaki farklı değerlerin sayısını döndürür; SQL'deki COUNT(DISTINCT field) işlevine benzer.


Ölçüm Toplaması


PercentilesAggregation


Bir alanın bir veya daha fazla yüzdelik değerini döndürür.


Ölçüm Toplaması


TopRowsAggregation


Belirtilen sıralamaya göre her gruptaki ilk birkaç satırı döndürür.


Gruplama


GroupByField


Satırları tek bir alanın değerine göre gruplar.


Gruplama


GroupByComposite


Satırları birden fazla alana göre gruplar ve sayfalama belirteçlerini destekler.


Gruplama


GroupByRange


Satırları sayısal aralıklara göre gruplar.


Gruplama


GroupByGeoDistance


Satırları merkezi bir noktadan olan mesafe aralıklarına göre gruplar.


Gruplama


GroupByFilter


Satırları birden fazla filtreye göre gruplar.


Gruplama


GroupByHistogram


Sabit sayısal aralıklar kullanarak histogram oluşturur.


Gruplama


GroupByDateHistogram


Sabit tarih veya saat aralıkları kullanarak histogram oluşturur.


Gruplama


GroupByGeoGrid


Satırları GeoHash ızgarasına göre gruplar.

Önemli
  • Toplama işleminde kullanılan bir arama dizini alanı için sıralama ve toplama özelliklerinin etkinleştirilmesi gerekir. Desteklenen alan türleri toplama türüne göre değişir. Arama dizini alan türleri ve bunların veri tablosu alan türleriyle eşleşmeleri hakkında bilgi için Veri türleri konusuna bakın.

  • Toplamalar sorgu eşleşmeleri üzerinde çalışır. Toplama içeren bir istek, yalnızca satır sorgulayan bir istekten daha karmaşıktır. Yanıtta satırlara ihtiyacınız yoksa limit parametresini 0 olarak ayarlayın.

  • Farklı değer sayısı, yüzdelikler ve alan gruplamaları yaklaşık hesaplamalar kullanır. 10.000'in altındaki farklı değer sayıları gerçek değere yakındır. 100 milyon farklı değer durumunda hata oranı yaklaşık %2'dir. Uç noktalardaki yüzdelikler genellikle daha doğrudur. Örneğin, P1 ve P99 değerleri P50'ye göre genellikle daha doğrudur. Alan gruplamalarının paralel hesaplanması da küçük bir hataya neden olabilir.

  • Birden fazla toplamayı birleştirebilirsiniz. Çok sayıda toplama veya derin iç içe geçme, istek karmaşıklığını artırır ve gecikme süresini yükseltebilir. İç içe geçme sınırları için Arama dizini sınırları konusuna bakın.

Verileri sorgulamak için search yöntemini çağırın. Ölçüm toplamaları için SearchQuery.aggregationList parametresini, gruplamalar için ise SearchQuery.groupByList parametresini yapılandırın.

SearchResponse search(SearchRequest request)

Aşağıdaki örnek, bir arama dizinindeki tüm satırları sorgular; fiyatların minimum, maksimum, toplam, ortalama ve sayı değerlerini, farklı kategori sayısını ve P50 yüzdelik değerini hesaplar; ayrıca satırları kategoriye göre gruplar.

SearchQuery searchQuery = SearchQuery.newBuilder()
        .query(QueryBuilders.matchAll())
        .limit(0)
        .addAggregation(AggregationBuilders.min("min_price", "price"))
        .addAggregation(AggregationBuilders.max("max_price", "price"))
        .addAggregation(AggregationBuilders.sum("sum_price", "price"))
        .addAggregation(AggregationBuilders.avg("avg_price", "price"))
        .addAggregation(AggregationBuilders.count("price_count", "price"))
        .addAggregation(AggregationBuilders.distinctCount(
                "category_count", "category"))
        .addAggregation(AggregationBuilders.percentiles(
                "price_percentiles", "price")
                .percentiles(Arrays.asList(50.0)))
        .addGroupBy(GroupByBuilders.groupByField(
                "category_group", "category").size(10))
        .build();

SearchRequest request =
        new SearchRequest("example_table", "example_index", searchQuery);
SearchResponse response = client.search(request);

AggregationResults aggregationResults = response.getAggregationResults();
System.out.println(aggregationResults
        .getAsMinAggregationResult("min_price").getValue());
System.out.println(aggregationResults
        .getAsMaxAggregationResult("max_price").getValue());
System.out.println(aggregationResults
        .getAsSumAggregationResult("sum_price").getValue());
System.out.println(aggregationResults
        .getAsAvgAggregationResult("avg_price").getValue());
System.out.println(aggregationResults
        .getAsCountAggregationResult("price_count").getValue());
System.out.println(aggregationResults
        .getAsDistinctCountAggregationResult("category_count").getValue());
System.out.println(aggregationResults
        .getAsPercentilesAggregationResult("price_percentiles")
        .getPercentilesAggregationItems());

GroupByFieldResult groupResult = response.getGroupByResults()
        .getAsGroupByFieldResult("category_group");
for (GroupByFieldResultItem item :
        groupResult.getGroupByFieldResultItems()) {
    System.out.println(item.getKey() + ": " + item.getRowCount());
}

Parametreler

Sorgu İsteği

request parametresinin türü SearchRequest şeklindedir. Aşağıdaki tabloda parametreleri açıklanmaktadır.


Ad


Tür


Açıklama


tableName (gerekli)


String


Veri tablosunun adı.


indexName (gerekli)


String


Arama dizininin adı.


searchQuery (gerekli)


SearchQuery


Sorgu koşulu ve toplama yapılandırmaları.


columnsToGet (isteğe bağlı)


SearchRequest.ColumnsToGet


Döndürülecek sütunlar. Bu parametre yalnızca TopRowsAggregation gruplarda satır döndürdüğünde uygulanır. Bu parametre yapılandırılmazsa yalnızca birincil anahtar sütunları döndürülür.


timeoutInMillisecond (isteğe bağlı)


int


Milisaniye cinsinden istek düzeyindeki sorgu zaman aşımı. Varsayılan değer: -1 (ayrı bir sorgu zaman aşımı yapılandırılmadığını gösterir).


routingValues (isteğe bağlı)


List<PrimaryKey>


Özel yönlendirme alanlarının birincil anahtar değerleri. Özel yönlendirme kullanılmıyorsa bu parametreyi yapılandırmanız gerekmez.

Sorgu Yapılandırması

request.searchQuery parametresinin türü SearchQuery şeklindedir. Aşağıdaki tabloda toplama ile ilgili parametreler açıklanmaktadır.


Ad


Tür


Açıklama


query (gerekli)


Query


Toplama kapsamını belirleyen sorgu koşulu. Bir arama dizinindeki tüm satırları toplamak için MatchAllQuery kullanın.


aggregationList (isteğe bağlı)


List<Aggregation>


Ölçüm toplaması yapılandırmaları. Bu parametre ile groupByList parametrelerinden en az birini yapılandırın.


groupByList (isteğe bağlı)


List<GroupBy>


Gruplama yapılandırmaları. Bu parametre ile aggregationList parametrelerinden en az birini yapılandırın.


limit (isteğe bağlı)


Integer


Döndürülecek maksimum satır sayısı. Varsayılan değer: 10. Yalnızca toplama sonuçlarına ihtiyacınız varsa bu parametreyi 0 olarak ayarlayın.


offset (isteğe bağlı)


Integer


Sorgunun başlayacağı satır konumu. Varsayılan değer: 0.


sort (isteğe bağlı)


Sort


Sorgu sonuçlarının sıralama düzeni. Bu parametre, ölçüm toplamalarının veya normal gruplamaların kapsamını değiştirmez.


trackTotalCount (isteğe bağlı)


int


Sayılması beklenen maksimum eşleşen satır sayısı. Bu parametre TRACK_TOTAL_COUNT olarak ayarlanırsa toplam sorgu eşleşmesi sayısını SearchResponse.totalCount üzerinden elde edebilirsiniz.


filter (isteğe bağlı)


SearchFilter


query sonuçlarına uygulanan filtre. Toplamalar filtrelenmiş sonuçlar üzerinde çalışır.

Ölçüm Toplamaları

Aşağıdaki parametre nesnelerini request.searchQuery.aggregationList[] listesine ekleyin. aggName ilgili sonucu tanımlar ve bir istekte benzersiz olmalıdır.

MinAggregation, MaxAggregation ve AvgAggregation


Ad


Tür


Açıklama


aggName (gerekli)


String


Toplamanın adı.


fieldName (gerekli)


String


Toplama alanının adı. Long, Double ve Date alanları desteklenir.


missing (isteğe bağlı)


ColumnValue


fieldName eksikse kullanılacak değer. Bu parametre yapılandırılmazsa alanın eksik olduğu satırlar yoksayılır.

SumAggregation


Ad


Tür


Açıklama


aggName (gerekli)


String


Toplamanın adı.


fieldName (gerekli)


String


Toplama alanının adı. Long ve Double alanları desteklenir.


missing (isteğe bağlı)


ColumnValue


fieldName eksikse toplam hesaplamasında kullanılacak değer. Bu parametre yapılandırılmazsa alanın eksik olduğu satırlar yoksayılır.

CountAggregation


Ad


Tür


Açıklama


aggName (gerekli)


String


Toplamanın adı.


fieldName (gerekli)


String


Boş olmayan değerleri sayılacak alan. Long, Double, Boolean, Keyword, Date, IP ve Geo-point alanları desteklenir. Seyrek sütunda alanı içermeyen satırlar sayılmaz.

Tüm sorgu eşleşmelerini saymak için SearchQuery içinde trackTotalCount parametresini yapılandırın ve SearchResponse.totalCount değerini okuyun. Bir arama dizinindeki tüm satırları saymak için MatchAllQuery kullanın.

DistinctCountAggregation


Ad


Tür


Açıklama


aggName (gerekli)


String


Toplamanın adı.


fieldName (gerekli)


String


Farklı değerleri sayılacak alan. Long, Double, Boolean, Keyword, Date, IP ve Geo-point alanları desteklenir.


missing (isteğe bağlı)


ColumnValue


fieldName eksikse farklı değer sayımında kullanılacak değer. Bu parametre yapılandırılmazsa alanın eksik olduğu satırlar yoksayılır.

PercentilesAggregation


Ad


Tür


Açıklama


aggName (gerekli)


String


Toplamanın adı.


fieldName (gerekli)


String


Toplama alanının adı. Long, Double ve Date alanları desteklenir.


percentiles (gerekli)


List<Double>


Hesaplanacak yüzdelikler; örneğin 25.0, 50.0, 90.0 ve 99.0.


missing (isteğe bağlı)


ColumnValue


fieldName eksikse yüzdelik hesaplamasında kullanılacak değer. Bu parametre yapılandırılmazsa alanın eksik olduğu satırlar yoksayılır.

TopRowsAggregation

TopRowsAggregation özelliğini bir gruplamanın alt toplamasi olarak kullanın.


Ad


Tür


Açıklama


aggName (gerekli)


String


Toplamanın adı.


limit (isteğe bağlı)


Integer


Her gruptan döndürülecek maksimum satır sayısı. Varsayılan değer: 1.


sort (isteğe bağlı)


Sort


Bir gruptaki satırların sıralama düzeni.

request.columnsToGet parametresi, döndürülen nitelik sütunlarını kontrol eder. Nitelik sütunlarını doğrudan arama dizininden döndürmek için arama dizinini oluştururken alanları depolayın. Hiçbir sütun belirtilmezse yalnızca birincil anahtarlar döndürülür.

Gruplamalar

Aşağıdaki parametre nesnelerini request.searchQuery.groupByList[] listesine ekleyin. groupByName ilgili sonucu tanımlar ve bir istekte benzersiz olmalıdır.

GroupByField


Ad


Tür


Açıklama


groupByName (gerekli)


String


Gruplamanın adı.


fieldName (gerekli)


String


Gruplama alanının adı. Long, Double, Boolean, Keyword, Date ve IP alanları desteklenir.


size (isteğe bağlı)


Integer


Döndürülecek grup sayısı. Varsayılan değer: 10. Maksimum değer: 2000.


minDocCount (isteğe bağlı)


Long


Bir gruptaki minimum satır sayısı. Daha az satırı olan gruplar döndürülmez.


groupBySorters (isteğe bağlı)


List<GroupBySorter>


Grup sıralama kuralları. Varsayılan olarak gruplar satır sayısına göre azalan sırada sıralanır. Birden fazla kural, eklendikleri sırayla etkili olur.


subAggregations (isteğe bağlı)


List<Aggregation>


Her grup içinde hesaplanan ölçüm toplamaları.


subGroupBys (isteğe bağlı)


List<GroupBy>


Her üst grup içinde uygulanan alt gruplamalar.

groupBySorters[] aşağıdaki değerleri destekler.


Değer


Açıklama


groupKeySortInAsc


Grupları anahtara göre sözlük sırasına göre artan şekilde sıralar.


groupKeySortInDesc


Grupları anahtara göre sözlük sırasına göre azalan şekilde sıralar.


rowCountSortInAsc


Grupları satır sayısına göre artan şekilde sıralar.


rowCountSortInDesc


Grupları satır sayısına göre azalan şekilde sıralar. Bu varsayılan düzendir.


subAggSortInAsc


Grupları belirtilen bir alt toplamanın değerine göre artan şekilde sıralar.


subAggSortInDesc


Grupları belirtilen bir alt toplamanın değerine göre azalan şekilde sıralar.

GroupByComposite


Ad


Tür


Açıklama


groupByName (gerekli)


String


Gruplamanın adı.


sources (gerekli)


List<GroupBy>


Birden fazla alan için gruplama kaynakları. En fazla 32 alan desteklenir. Kaynaklar GroupByField, GroupByHistogram veya GroupByDateHistogram olabilir. Bir alan kaynağı adını, alanını ve sıralama düzenini belirtebilir. Sayısal histogram kaynağı ayrıca bir aralık belirtebilir; tarih histogramı kaynağı ise ek olarak bir saat dilimi belirtebilir. Bir kaynak yalnızca anahtara göre sıralanabilir. Varsayılan düzen azalandır. Bir alan eksikse karşılık gelen anahtar null olur.


nextToken (isteğe bağlı)


String


Grupların sonraki sayfası için sayfalama belirteci. İlk istekte bu parametreyi belirtmeyin. Yanıttaki nextToken boş değilse değeri değiştirmeden sonraki istekte kullanın.


size (isteğe bağlı)


Integer


Döndürülecek grup sayısı. Varsayılan değer: 10. Maksimum değer: 2000. Çoğu durumda grup sayısını sınırlamak için bu parametreyi kullanın.


suggestedSize (isteğe bağlı)


Integer


Spark ve Presto gibi hesaplama motorlarıyla yüksek throughput entegrasyonları için yumuşak bir sınır. Bu parametreyi -1 veya sunucu sınırından büyük bir değere ayarlayabilirsiniz. Döndürülen gerçek sayı min(suggestedSize, server-side group limit, total groups) şeklindedir. Aynı istekte bu parametre ile size parametresini birlikte yapılandırmayın.


subAggregations (isteğe bağlı)


List<Aggregation>


Alt toplamalar.


subGroupBys (isteğe bağlı)


List<GroupBy>


Alt gruplamalar. GroupByComposite kendisi bir alt gruplama olarak kullanılamaz.

Not

Tablestore Java SDK, nextToken değerini bir dize olarak temsil eder. Belirteci kalıcı hale getirirseniz veya aktarırsanız içeriğini değiştirmeyin.

GroupByRange


Ad


Tür


Açıklama


groupByName (gerekli)


String


Gruplamanın adı.


fieldName (gerekli)


String


Gruplama alanının adı. Long ve Double alanları desteklenir.


ranges (gerekli)


List<Range>


Aralıklar. Her aralık sol kapalı ve sağ açık olup [from, to) şeklindedir. Sınır olarak Double.MIN_VALUE ve Double.MAX_VALUE kullanabilirsiniz.


subAggregations (isteğe bağlı)


List<Aggregation>


Alt toplamalar.


subGroupBys (isteğe bağlı)


List<GroupBy>


Alt gruplamalar.

GroupByGeoDistance


Ad


Tür


Açıklama


groupByName (gerekli)


String


Gruplamanın adı.


fieldName (gerekli)


String


Gruplama alanının adı. Yalnızca Geo-point alanları desteklenir.


origin (gerekli)


GeoPoint


Merkezi nokta. Oluşturucu parametreleri önce enlem sonra boylam şeklindedir. Enlem aralığı [-90,+90], boylam aralığı ise [-180,+180] şeklindedir.


ranges (gerekli)


List<Range>


Metre cinsinden mesafe aralıkları. Her aralık sol kapalı ve sağ açık olup [from, to) şeklindedir.


subAggregations (isteğe bağlı)


List<Aggregation>


Alt toplamalar.


subGroupBys (isteğe bağlı)


List<GroupBy>


Alt gruplamalar.

GroupByFilter


Ad


Tür


Açıklama


groupByName (gerekli)


String


Gruplamanın adı.


filters (gerekli)


List<Query>


Filtreler. Sonuçlar, filtrelerin eklendiği sırayla döndürülür.


subAggregations (isteğe bağlı)


List<Aggregation>


Alt toplamalar.


subGroupBys (isteğe bağlı)


List<GroupBy>


Alt gruplamalar.

GroupByHistogram


Ad


Tür


Açıklama


groupByName (gerekli)


String


Gruplamanın adı.


fieldName (gerekli)


String


Gruplama alanının adı. Long ve Double alanları desteklenir.


interval (gerekli)


ColumnValue


Histogram aralığı.


fieldRange (isteğe bağlı)


FieldRange


min ve max içeren toplama aralığı. (max-min)/interval değeri 2000 değerini aşamaz.


offset (isteğe bağlı)


ColumnValue


Kova sınırlarının varsayılan başlangıç noktasından sapması.


minDocCount (isteğe bağlı)


Long


Bir kovadaki minimum satır sayısı. Daha az satırı olan kovalar döndürülmez.


missing (isteğe bağlı)


ColumnValue


fieldName eksikse histogramda kullanılacak değer. Bu parametre yapılandırılmazsa alanın eksik olduğu satırlar yoksayılır.


groupBySorters (isteğe bağlı)


List<GroupBySorter>


Kova sıralama kuralları.


subAggregations (isteğe bağlı)


List<Aggregation>


Alt toplamalar.


subGroupBys (isteğe bağlı)


List<GroupBy>


Alt gruplamalar.

GroupByDateHistogram

Önemli

Tarih histogramı toplaması, Tablestore Java SDK 5.16.1 ve sonraki sürümler tarafından desteklenir. Arama dizinleri için Date alan türü, Tablestore Java SDK 5.13.9 ve sonraki sürümler tarafından desteklenir. Sürüm bilgileri için Tablestore Java SDK sürüm geçmişi konusuna bakın.


Ad


Tür


Açıklama


groupByName (gerekli)


String


Gruplamanın adı.


fieldName (gerekli)


String


Gruplama alanının adı. Yalnızca Date alanları desteklenir.


interval (gerekli)


DateTimeValue


Bir değer ve DateTimeUnit içeren tarih veya saat aralığı.


fieldRange (isteğe bağlı)


FieldRange


min ve max içeren toplama aralığı. (max-min)/interval değeri 2000 değerini aşamaz.


minDocCount (isteğe bağlı)


Long


Bir kovadaki minimum satır sayısı. Daha az satırı olan kovalar döndürülmez.


missing (isteğe bağlı)


ColumnValue


fieldName eksikse histogramda kullanılacak tarih değeri. Bu parametre yapılandırılmazsa alanın eksik olduğu satırlar yoksayılır.


timeZone (isteğe bağlı)


String


+hh:mm veya -hh:mm formatındaki saat dilimi; örneğin +08:00. Date alan formatı saat dilimi bilgisi içermiyorsa toplama sonuçlarında saat kaymasını önlemek için bu parametreyi yapılandırın.


groupBySorters (isteğe bağlı)


List<GroupBySorter>


Kova sıralama kuralları.


subAggregations (isteğe bağlı)


List<Aggregation>


Alt toplamalar.


subGroupBys (isteğe bağlı)


List<GroupBy>


Alt gruplamalar.

GroupByGeoGrid


Ad


Tür


Açıklama


groupByName (gerekli)


String


Gruplamanın adı.


fieldName (gerekli)


String


Gruplama alanının adı. Yalnızca Geo-point alanları desteklenir.


precision (gerekli)


GeoHashPrecision


GeoHash ızgara hassasiyeti. Değerler yaklaşık 5.009 km × 4.992 km boyutundaki GHP_5009KM_4992KM_1 ile yaklaşık 37 mm × 19 mm boyutundaki GHP_37MM_19MM_12 arasında değişir. Daha büyük bir sonek daha küçük bir ızgara belirtir.


size (isteğe bağlı)


Integer


Döndürülecek ızgara grubu sayısı.


subAggregations (isteğe bağlı)


List<Aggregation>


Alt toplamalar.


subGroupBys (isteğe bağlı)


List<GroupBy>


Alt gruplamalar.

Yanıt

search yöntemi SearchResponse döndürür. Aşağıdaki tabloda toplama ile ilgili alanlar açıklanmaktadır.


Ad


Tür


Açıklama


aggregationResults


AggregationResults


Ölçüm toplaması sonuçları. Değeri almak için getAggregationResults() yöntemini çağırın ve belirli bir sonuç türünü almak için bir toplama adı kullanın.


groupByResults


GroupByResults


Gruplama sonuçları. Değeri almak için getGroupByResults() yöntemini çağırın ve belirli bir sonuç türünü almak için bir gruplama adı kullanın.


totalCount


long


Sorgu eşleşmelerinin sayısı. Değeri almak için getTotalCount() yöntemini çağırın. Değer trackTotalCount parametresine bağlıdır.


isAllSuccess


boolean


Tüm dizin bölümlerinin sorgulanıp sorgulanmadığını gösterir. Değeri almak için isAllSuccess() yöntemini çağırın. Bu alan false ise toplama sonuçları eksik olabilir.

Ölçüm Toplaması Sonuçları


Yapılandırma Türü


Sonuç Türü


Sonuç Alanı ve Erişimci


MinAggregation


MinAggregationResult


value bir double değeridir. getAsMinAggregationResult(aggName).getValue() yöntemini çağırın.


MaxAggregation


MaxAggregationResult


value bir double değeridir. getAsMaxAggregationResult(aggName).getValue() yöntemini çağırın.


SumAggregation


SumAggregationResult


value bir double değeridir. getAsSumAggregationResult(aggName).getValue() yöntemini çağırın.


AvgAggregation


AvgAggregationResult


value bir double değeridir. getAsAvgAggregationResult(aggName).getValue() yöntemini çağırın.


CountAggregation


CountAggregationResult


value bir long değeridir. getAsCountAggregationResult(aggName).getValue() yöntemini çağırın.


DistinctCountAggregation


DistinctCountAggregationResult


value bir long değeridir. getAsDistinctCountAggregationResult(aggName).getValue() yöntemini çağırın.


PercentilesAggregation


PercentilesAggregationResult


percentilesAggregationItems bir List<PercentilesAggregationItem> listesidir. getAsPercentilesAggregationResult(aggName).getPercentilesAggregationItems() yöntemini çağırın. Her öğe key ve value içerir.


TopRowsAggregation


TopRowsAggregationResult


rows bir List<Row> listesidir. getAsTopRowsAggregationResult(aggName).getRows() yöntemini çağırın.

Gruplama Sonuçları


Yapılandırma Türü


Sonuç Türü


Temel Sonuç Alanları


GroupByField


GroupByFieldResult


groupByFieldResultItems. Her öğe key, rowCount, subAggregationResults ve subGroupByResults içerir.


GroupByComposite


GroupByCompositeResult


sourceNames, groupByCompositeResultItems ve nextToken. Her öğedeki keys konumları sourceNames ile eşleşir.


GroupByRange


GroupByRangeResult


groupByRangeResultItems. Her öğe from, to ve rowCount içerir.


GroupByGeoDistance


GroupByGeoDistanceResult


groupByGeoDistanceResultItems. Her öğe mesafe from, to ve rowCount içerir.


GroupByFilter


GroupByFilterResult


groupByFilterResultItems. Her öğe rowCount içerir ve öğe sırası filtre sırasıyla eşleşir.


GroupByHistogram


GroupByHistogramResult


groupByHistogramItems. Her öğe kova başlangıcı key ve satır sayısı value içerir.


GroupByDateHistogram


GroupByDateHistogramResult


groupByDateHistogramItems. Her öğe milisaniye cinsinden zaman damgası timestamp ve rowCount içerir.


GroupByGeoGrid


GroupByGeoGridResult


groupByGeoGridResultItems. Her öğe GeoHash key, sol üst ve sağ alt koordinatları içeren geoGrid ve rowCount içerir.

Örnekler

Alt Toplamalar ve Alt Gruplamalar Kullanma

Aşağıdaki örnek, satırları kategoriye göre gruplar, her kategorideki en yüksek fiyatı hesaplar ve ardından her kategorideki satırları şehre göre gruplar. Grup sıralama kuralları eklendikleri sırayla etkili olur.

SearchQuery searchQuery = SearchQuery.newBuilder()
        .query(QueryBuilders.matchAll())
        .limit(0)
        .addGroupBy(GroupByBuilders.groupByField(
                "category_group", "category")
                .size(10)
                .addGroupBySorter(GroupBySorter.groupKeySortInAsc())
                .addSubAggregation(AggregationBuilders.max(
                        "max_price", "price"))
                .addSubGroupBy(GroupByBuilders.groupByField(
                        "city_group", "city").size(10)))
        .build();

SearchRequest request =
        new SearchRequest("example_table", "example_index", searchQuery);
SearchResponse response = client.search(request);

GroupByFieldResult result = response.getGroupByResults()
        .getAsGroupByFieldResult("category_group");
for (GroupByFieldResultItem item :
        result.getGroupByFieldResultItems()) {
    double maxPrice = item.getSubAggregationResults()
            .getAsMaxAggregationResult("max_price")
            .getValue();
    GroupByFieldResult cityResult = item.getSubGroupByResults()
            .getAsGroupByFieldResult("city_group");
    System.out.println(item.getKey() + ": " + maxPrice);
    System.out.println(cityResult.getGroupByFieldResultItems());
}

Çok Alanlı Gruplamada Sayfalama

GroupByComposite, çok sütunlu anahtarları düz bir yapıda döndürür ve nextToken ile sayfalama yapmayı destekler.

GroupByComposite.Builder compositeBuilder = GroupByBuilders
        .groupByComposite("category_city_group")
        .addSources(GroupByBuilders.groupByField(
                "category", "category")
                .addGroupBySorter(GroupBySorter.groupKeySortInAsc()))
        .addSources(GroupByBuilders.groupByField(
                "city", "city")
                .addGroupBySorter(GroupBySorter.groupKeySortInAsc()))
        .size(100);

String nextToken = null;
do {
    GroupByComposite groupBy = nextToken == null
            ? compositeBuilder.build()
            : compositeBuilder.nextToken(nextToken).build();
    SearchQuery searchQuery = SearchQuery.newBuilder()
            .query(QueryBuilders.matchAll())
            .limit(0)
            .addGroupBy(groupBy)
            .build();
    SearchRequest request = new SearchRequest(
            "example_table", "example_index", searchQuery);
    SearchResponse response = client.search(request);

    GroupByCompositeResult result = response.getGroupByResults()
            .getAsGroupByCompositeResult("category_city_group");
    for (GroupByCompositeResultItem item :
            result.getGroupByCompositeResultItems()) {
        System.out.println(item.getKeys() + ": " + item.getRowCount());
    }
    nextToken = result.getNextToken();
} while (nextToken != null);

Aralık, Mesafe ve Filtreye Göre Gruplama

Aşağıdaki kod, üç gruplama türünün temel yapılandırmalarını gösterir. Bunları aynı SearchQuery içinde birleştirebilirsiniz.

GroupByRange priceRanges = GroupByBuilders
        .groupByRange("price_ranges", "price")
        .addRange(0, 100)
        .addRange(100, 500)
        .build();

GroupByGeoDistance distanceRanges = GroupByBuilders
        .groupByGeoDistance("distance_ranges", "location")
        .origin(30.2741, 120.1551)
        .addRange(0, 10000)
        .addRange(10000, 100000)
        .build();

GroupByFilter categoryFilters = GroupByBuilders
        .groupByFilter("category_filters")
        .addFilter(QueryBuilders.term("category", "books"))
        .addFilter(QueryBuilders.term("category", "games"))
        .build();

Sayısal ve Tarih Histogramları Oluşturma

Aşağıdaki örnek, satırları 20'lik bir sayısal aralığa ve bir aylık bir tarih aralığına göre gruplar.

GroupByHistogram priceHistogram = GroupByBuilders
        .groupByHistogram("price_histogram", "price")
        .interval(20)
        .offset(0)
        .minDocCount(1L)
        .addFieldRange(0, 100)
        .addGroupBySorter(GroupBySorter.groupKeySortInAsc())
        .build();

GroupByDateHistogram dateHistogram = GroupByBuilders
        .groupByDateHistogram("date_histogram", "event_date")
        .interval(1, DateTimeUnit.MONTH)
        .fieldRange("2026-01-01", "2026-06-01")
        .timeZone("+08:00")
        .minDocCount(1L)
        .addGroupBySorter(GroupBySorter.groupKeySortInAsc())
        .build();

SearchQuery searchQuery = SearchQuery.newBuilder()
        .query(QueryBuilders.matchAll())
        .limit(0)
        .addGroupBy(priceHistogram)
        .addGroupBy(dateHistogram)
        .build();
SearchResponse response = client.search(new SearchRequest(
        "example_table", "example_index", searchQuery));

Coğrafi Izgaraya Göre Gruplama

Aşağıdaki örnek, coğrafi bir alanı yaklaşık 39 km × 19 km boyutundaki GeoHash ızgaralarına göre gruplar.

SearchQuery searchQuery = SearchQuery.newBuilder()
        .query(QueryBuilders.matchAll())
        .limit(0)
        .addGroupBy(GroupByBuilders.groupByGeoGrid(
                "geo_grid", "location")
                .precision(GeoHashPrecision.GHP_39KM_19KM_4)
                .size(100))
        .build();

SearchResponse response = client.search(new SearchRequest(
        "example_table", "example_index", searchQuery));
GroupByGeoGridResult result = response.getGroupByResults()
        .getAsGroupByGeoGridResult("geo_grid");
System.out.println(result.getGroupByGeoGridResultItems());

Gruplardan Satır Döndürme

Aşağıdaki örnek, satırları kategoriye göre gruplar ve her kategorideki en yüksek fiyata sahip satırı döndürür.

SearchQuery searchQuery = SearchQuery.newBuilder()
        .query(QueryBuilders.matchAll())
        .limit(0)
        .addGroupBy(GroupByBuilders.groupByField(
                "category_group", "category")
                .size(10)
                .addSubAggregation(AggregationBuilders.topRows(
                        "top_price")
                        .limit(1)
                        .sort(new Sort(Arrays.asList(
                                new FieldSort(
                                        "price", SortOrder.DESC))))))
        .build();

SearchRequest.ColumnsToGet columnsToGet =
        new SearchRequest.ColumnsToGet();
columnsToGet.setColumns(Arrays.asList("category", "price"));

SearchRequest request =
        new SearchRequest("example_table", "example_index", searchQuery);
request.setColumnsToGet(columnsToGet);
SearchResponse response = client.search(request);

GroupByFieldResult result = response.getGroupByResults()
        .getAsGroupByFieldResult("category_group");
for (GroupByFieldResultItem item :
        result.getGroupByFieldResultItems()) {
    List<Row> rows = item.getSubAggregationResults()
            .getAsTopRowsAggregationResult("top_price")
            .getRows();
    System.out.println(item.getKey() + ": " + rows);
}

Çok Alanlı Gruplama Karşılaştırması

Birden fazla alana göre gruplamak için birden fazla GroupByField yapılandırmasını iç içe yerleştirin veya doğrudan GroupByComposite kullanın. Sayfalama gereksinimlerine, yanıt yapısına ve sıralama kurallarına göre seçim yapın.


Öğe


İç İçe Geçmiş Alan Gruplamaları


Bileşik Gruplama


Yapılandırma


Üst GroupByField öğesine subGroupBys ekleyin.


GroupByComposite.sources listesine birden fazla gruplama kaynağı ekleyin.


Grup Sayısı


Her düzeyde en fazla 2.000 grup.


Sayfa başına en fazla 2.000 grup.


Alan Sayısı


En fazla üç iç içe geçme düzeyi.


En fazla 32 alan.


Yanıt Yapısı


Üst ve alt düzeylere göre iç içe geçmiş.


Çok sütunlu anahtarlar düz bir liste olarak döndürülür.


Sayfalama


Desteklenmez.


nextToken ile desteklenir.


Sıralama


Grup anahtarı, satır sayısı veya alt toplama değerine göre sıralamayı destekler.


Her gruplama kaynağı yalnızca anahtara göre sözlük sırasına göre sıralamayı destekler. Varsayılan düzen azalandır.


Alt Toplamalar


Desteklenir.


Desteklenir.


Tarih Alanı Uyumluluğu


Grup anahtarları alan için tanımlanan tarih formatını kullanır.


Tarih grup anahtarları zaman damgası dizeleri olarak döndürülür.