Elasticsearch - Tổng hợp
Khung tổng hợp thu thập tất cả dữ liệu được chọn bởi truy vấn tìm kiếm và bao gồm nhiều khối xây dựng, giúp xây dựng các bản tóm tắt phức tạp của dữ liệu. Cấu trúc cơ bản của một tập hợp được hiển thị ở đây:
"aggregations" : {
"" : {
"" : {
}
[,"meta" : { [] } ]?
[,"aggregations" : { []+ } ]?
}
[,"" : { ... } ]*
}
Có nhiều loại tổng hợp khác nhau, mỗi loại có mục đích riêng. Chúng được thảo luận chi tiết trong chương này.
Tổng hợp số liệu
Các tổng hợp này giúp tính toán ma trận từ các giá trị của trường của các tài liệu tổng hợp và đôi khi một số giá trị có thể được tạo từ các tập lệnh.
Ma trận số có giá trị đơn như tổng hợp trung bình hoặc đa giá trị như thống kê.
Tổng hợp Trung bình
Tổng hợp này được sử dụng để lấy giá trị trung bình của bất kỳ trường số nào có trong các tài liệu tổng hợp. Ví dụ,
POST /schools/_search
{
"aggs":{
"avg_fees":{"avg":{"field":"fees"}}
}
}
Khi chạy đoạn mã trên, chúng tôi nhận được kết quả sau:
{
"took" : 41,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "schools",
"_type" : "school",
"_id" : "5",
"_score" : 1.0,
"_source" : {
"name" : "Central School",
"description" : "CBSE Affiliation",
"street" : "Nagan",
"city" : "paprola",
"state" : "HP",
"zip" : "176115",
"location" : [
31.8955385,
76.8380405
],
"fees" : 2200,
"tags" : [
"Senior Secondary",
"beautiful campus"
],
"rating" : "3.3"
}
},
{
"_index" : "schools",
"_type" : "school",
"_id" : "4",
"_score" : 1.0,
"_source" : {
"name" : "City Best School",
"description" : "ICSE",
"street" : "West End",
"city" : "Meerut",
"state" : "UP",
"zip" : "250002",
"location" : [
28.9926174,
77.692485
],
"fees" : 3500,
"tags" : [
"fully computerized"
],
"rating" : "4.5"
}
}
]
},
"aggregations" : {
"avg_fees" : {
"value" : 2850.0
}
}
}
Cardinality Aggregation
Tổng hợp này cung cấp số lượng các giá trị riêng biệt của một trường cụ thể.
POST /schools/_search?size=0
{
"aggs":{
"distinct_name_count":{"cardinality":{"field":"fees"}}
}
}
Khi chạy đoạn mã trên, chúng tôi nhận được kết quả sau:
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"distinct_name_count" : {
"value" : 2
}
}
}
Note - Giá trị của cardinality là 2 vì có hai giá trị khác nhau trong phí.
Tổng hợp số liệu thống kê mở rộng
Tổng hợp này tạo ra tất cả các thống kê về một trường số cụ thể trong các tài liệu tổng hợp.
POST /schools/_search?size=0
{
"aggs" : {
"fees_stats" : { "extended_stats" : { "field" : "fees" } }
}
}
Khi chạy đoạn mã trên, chúng tôi nhận được kết quả sau:
{
"took" : 8,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"fees_stats" : {
"count" : 2,
"min" : 2200.0,
"max" : 3500.0,
"avg" : 2850.0,
"sum" : 5700.0,
"sum_of_squares" : 1.709E7,
"variance" : 422500.0,
"std_deviation" : 650.0,
"std_deviation_bounds" : {
"upper" : 4150.0,
"lower" : 1550.0
}
}
}
}
Tổng hợp tối đa
Tổng hợp này tìm giá trị tối đa của một trường số cụ thể trong các tài liệu tổng hợp.
POST /schools/_search?size=0
{
"aggs" : {
"max_fees" : { "max" : { "field" : "fees" } }
}
}
Khi chạy đoạn mã trên, chúng tôi nhận được kết quả sau:
{
"took" : 16,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"max_fees" : {
"value" : 3500.0
}
}
}
Tổng hợp tối thiểu
Tổng hợp này tìm giá trị nhỏ nhất của một trường số cụ thể trong các tài liệu tổng hợp.
POST /schools/_search?size=0
{
"aggs" : {
"min_fees" : { "min" : { "field" : "fees" } }
}
}
Khi chạy đoạn mã trên, chúng tôi nhận được kết quả sau:
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"min_fees" : {
"value" : 2200.0
}
}
}
Tổng hợp
Tập hợp này tính tổng của một trường số cụ thể trong các tài liệu được tổng hợp.
POST /schools/_search?size=0
{
"aggs" : {
"total_fees" : { "sum" : { "field" : "fees" } }
}
}
Khi chạy đoạn mã trên, chúng tôi nhận được kết quả sau:
{
"took" : 8,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"total_fees" : {
"value" : 5700.0
}
}
}
Có một số tổng hợp số liệu khác được sử dụng trong các trường hợp đặc biệt như tổng hợp giới hạn địa lý và tổng hợp trung tâm địa lý cho mục đích vị trí địa lý.
Tổng hợp số liệu thống kê
Tập hợp chỉ số nhiều giá trị tính toán thống kê trên các giá trị số được trích xuất từ các tài liệu tổng hợp.
POST /schools/_search?size=0
{
"aggs" : {
"grades_stats" : { "stats" : { "field" : "fees" } }
}
}
Khi chạy đoạn mã trên, chúng tôi nhận được kết quả sau:
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"grades_stats" : {
"count" : 2,
"min" : 2200.0,
"max" : 3500.0,
"avg" : 2850.0,
"sum" : 5700.0
}
}
}
Siêu dữ liệu tổng hợp
Bạn có thể thêm một số dữ liệu về tập hợp tại thời điểm yêu cầu bằng cách sử dụng thẻ meta và có thể nhận được dữ liệu đó để phản hồi.
POST /schools/_search?size=0
{
"aggs" : {
"min_fees" : { "avg" : { "field" : "fees" } ,
"meta" :{
"dsc" :"Lowest Fees This Year"
}
}
}
}
Khi chạy đoạn mã trên, chúng tôi nhận được kết quả sau:
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"min_fees" : {
"meta" : {
"dsc" : "Lowest Fees This Year"
},
"value" : 2850.0
}
}
}