Elasticsearch - การรวม
เฟรมเวิร์กการรวมรวบรวมข้อมูลทั้งหมดที่เลือกโดยคำค้นหาและประกอบด้วยส่วนประกอบสำเร็จรูปจำนวนมากซึ่งช่วยในการสร้างสรุปข้อมูลที่ซับซ้อน โครงสร้างพื้นฐานของการรวมแสดงที่นี่ -
"aggregations" : {
"" : {
"" : {
}
[,"meta" : { [] } ]?
[,"aggregations" : { []+ } ]?
}
[,"" : { ... } ]*
}
การรวบรวมมีหลายประเภทแต่ละประเภทมีวัตถุประสงค์ของตัวเอง พวกเขาจะกล่าวถึงรายละเอียดในบทนี้
การรวมเมตริก
การรวมเหล่านี้ช่วยในการคำนวณเมทริกซ์จากค่าของฟิลด์ของเอกสารที่รวมและบางครั้งค่าบางอย่างสามารถสร้างขึ้นจากสคริปต์
เมทริกซ์ตัวเลขอาจมีค่าเดียวเช่นการรวมเฉลี่ยหรือหลายค่าเช่นสถิติ
การรวมเฉลี่ย
การรวมนี้ใช้เพื่อหาค่าเฉลี่ยของฟิลด์ตัวเลขใด ๆ ที่มีอยู่ในเอกสารที่รวม ตัวอย่างเช่น,
POST /schools/_search
{
"aggs":{
"avg_fees":{"avg":{"field":"fees"}}
}
}
ในการรันโค้ดด้านบนเราจะได้ผลลัพธ์ดังนี้ -
{
"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
}
}
}
การรวมคาร์ดินาลิตี้
การรวมนี้ให้จำนวนค่าที่แตกต่างกันของเขตข้อมูลหนึ่ง ๆ
POST /schools/_search?size=0
{
"aggs":{
"distinct_name_count":{"cardinality":{"field":"fees"}}
}
}
ในการรันโค้ดด้านบนเราจะได้ผลลัพธ์ดังนี้ -
{
"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 - มูลค่าของคาร์ดินาลลิตี้คือ 2 เนื่องจากมีค่าธรรมเนียมที่แตกต่างกันสองค่า
การรวมสถิติเพิ่มเติม
การรวมนี้สร้างสถิติทั้งหมดเกี่ยวกับฟิลด์ตัวเลขเฉพาะในเอกสารรวม
POST /schools/_search?size=0
{
"aggs" : {
"fees_stats" : { "extended_stats" : { "field" : "fees" } }
}
}
ในการรันโค้ดด้านบนเราจะได้ผลลัพธ์ดังนี้ -
{
"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
}
}
}
}
การรวมสูงสุด
การรวมนี้ค้นหาค่าสูงสุดของฟิลด์ตัวเลขเฉพาะในเอกสารรวม
POST /schools/_search?size=0
{
"aggs" : {
"max_fees" : { "max" : { "field" : "fees" } }
}
}
ในการรันโค้ดด้านบนเราจะได้ผลลัพธ์ดังนี้ -
{
"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
}
}
}
การรวมขั้นต่ำ
การรวมนี้ค้นหาค่าต่ำสุดของฟิลด์ตัวเลขเฉพาะในเอกสารรวม
POST /schools/_search?size=0
{
"aggs" : {
"min_fees" : { "min" : { "field" : "fees" } }
}
}
ในการรันโค้ดด้านบนเราจะได้ผลลัพธ์ดังนี้ -
{
"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
}
}
}
ผลรวมการรวม
การรวมนี้คำนวณผลรวมของเขตข้อมูลตัวเลขเฉพาะในเอกสารรวม
POST /schools/_search?size=0
{
"aggs" : {
"total_fees" : { "sum" : { "field" : "fees" } }
}
}
ในการรันโค้ดด้านบนเราจะได้ผลลัพธ์ดังนี้ -
{
"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
}
}
}
มีการรวมเมตริกอื่น ๆ ที่ใช้ในกรณีพิเศษเช่นการรวมขอบเขตทางภูมิศาสตร์และการรวมศูนย์ภูมิศาสตร์เพื่อจุดประสงค์ในการระบุตำแหน่งทางภูมิศาสตร์
การรวมสถิติ
การรวมเมตริกหลายค่าที่คำนวณสถิติมากกว่าค่าตัวเลขที่ดึงมาจากเอกสารที่รวม
POST /schools/_search?size=0
{
"aggs" : {
"grades_stats" : { "stats" : { "field" : "fees" } }
}
}
ในการรันโค้ดด้านบนเราจะได้ผลลัพธ์ดังนี้ -
{
"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
}
}
}
ข้อมูลเมตาการรวม
คุณสามารถเพิ่มข้อมูลบางอย่างเกี่ยวกับการรวมในเวลาที่ร้องขอได้โดยใช้เมตาแท็กและรับข้อมูลนั้นได้
POST /schools/_search?size=0
{
"aggs" : {
"min_fees" : { "avg" : { "field" : "fees" } ,
"meta" :{
"dsc" :"Lowest Fees This Year"
}
}
}
}
ในการรันโค้ดด้านบนเราจะได้ผลลัพธ์ดังนี้ -
{
"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
}
}
}