设置Headers中Content-Type值为application/json
$str = '';
foreach ($result as $key=>&$item)
{
$index = ['index'=>['_id'=> $key+1]];
$str .= json_encode($index)."\n";
$str .= json_encode($item)."\n";
}
echo $str;
file_put_contents('studentCourse'.'.json', $str);
生成类似如下文件
{"index":{"_id": "1"}}
{"username": "alfred way","job": "java engineer","age": 18,"birth": "1990-01-02","isMarried":false}
{"index":{"_id": "2"}}
{"username": "alfred","job": "java senior and java specialist","age": 28,"birth": "1980-05-07","isMarried":true}
先造一些测试数据
POST test_index_search/doc/_bulk
{"index":{"_id": "1"}}
{"username": "a","job": "java engineer","age": 18,"birth": "1990-01-02","isMarried":false,"salary":5000}
{"index":{"_id": "2"}}
{"username": "b","job": "java engineer","age": 28,"birth": "1980-05-07","isMarried":true,"salary":10000}
{"index":{"_id": "3"}}
{"username": "c","job": "java senior engineer","age": 22,"birth": "1985-08-07","isMarried":false,"salary":15000}
{"index":{"_id": "4"}}
{"username": "d","job": "ruby engineer","age": 23,"birth": "1989-08-02","isMarried":false,"salary":10000}
{"index":{"_id": "5"}}
{"username": "e","job": "web engineer","age": 33,"birth": "1989-08-02","isMarried":false,"salary":10000}
{"index":{"_id": "6"}}
{"username": "f","job": "web engineer","age": 43,"birth": "1989-08-02","isMarried":false,"salary":15000}
{"index":{"_id": "7"}}
{"username": "g","job": "php engineer","age": 25,"birth": "1989-08-02","isMarried":false,"salary":13000}
聚合分析简介
POST test_index_search/doc/_search
{
"aggs": {
"people_per_job": {
"terms": {
"field": "job.keyword"
}
}
}
}
POST test_index_search/doc/_search
{
"aggs": {
"people_per_job": {
"terms": {
"field": "job.keyword",
"size": 1
}
}
}
}
POST test_index_search/doc/_search
{
"size": 0,
"aggs": {
"people_per_job": {
"terms": {
"field": "job.keyword",
"size": 1
}
}
}
}
metric聚合分析
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"min_age": {
"min": {
"field": "age"
}
},
"max_age": {
"max": {
"field": "age"
}
},
"sum_age": {
"sum": {
"field": "age"
}
},
"avg_age": {
"avg": {
"field": "age"
}
}
}
}
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"count_of_job": {
"cardinality": {
"field": "job.keyword"
}
}
}
}
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"stats_age": {
"stats": {
"field": "age"
}
}
}
}
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"extended_stats_salary": {
"extended_stats": {
"field": "salary"
}
}
}
}
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"percentiles_salary": {
"percentiles": {
"field": "salary"
}
}
}
}
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"percentile_ranks_salary": {
"percentile_ranks": {
"field": "salary",
"values": [10000,13000]
}
}
}
}
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"percentiles_salary": {
"percentiles": {
"field": "salary",
"percents": [
25,
50,
75,
100
]
}
}
}
}
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"jobs": {
"terms": {
"field": "job.keyword",
"size": 10
},
"aggs": {
"top_employee": {
"top_hits": {
"size": 1,
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
}
}
}
}
}
查询结果
{
"took": 39,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 7,
"max_score": 0,
"hits": []
},
"aggregations": {
"jobs": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "java engineer",
"doc_count": 2,
"top_employee": {
"hits": {
"total": 2,
"max_score": null,
"hits": [
{
"_index": "test_index_search",
"_type": "doc",
"_id": "2",
"_score": null,
"_source": {
"username": "b",
"job": "java engineer",
"age": 28,
"birth": "1980-05-07",
"isMarried": true,
"salary": 10000
},
"sort": [
28
]
}
]
}
}
},
{
"key": "web engineer",
"doc_count": 2,
"top_employee": {
"hits": {
"total": 2,
"max_score": null,
"hits": [
{
"_index": "test_index_search",
"_type": "doc",
"_id": "6",
"_score": null,
"_source": {
"username": "f",
"job": "web engineer",
"age": 43,
"birth": "1989-08-02",
"isMarried": false,
"salary": 15000
},
"sort": [
43
]
}
]
}
}
},
{
"key": "java senior engineer",
"doc_count": 1,
"top_employee": {
"hits": {
"total": 1,
"max_score": null,
"hits": [
{
"_index": "test_index_search",
"_type": "doc",
"_id": "3",
"_score": null,
"_source": {
"username": "c",
"job": "java senior engineer",
"age": 22,
"birth": "1985-08-07",
"isMarried": false,
"salary": 15000
},
"sort": [
22
]
}
]
}
}
},
{
"key": "php engineer",
"doc_count": 1,
"top_employee": {
"hits": {
"total": 1,
"max_score": null,
"hits": [
{
"_index": "test_index_search",
"_type": "doc",
"_id": "7",
"_score": null,
"_source": {
"username": "g",
"job": "php engineer",
"age": 25,
"birth": "1989-08-02",
"isMarried": false,
"salary": 13000
},
"sort": [
25
]
}
]
}
}
},
{
"key": "ruby engineer",
"doc_count": 1,
"top_employee": {
"hits": {
"total": 1,
"max_score": null,
"hits": [
{
"_index": "test_index_search",
"_type": "doc",
"_id": "4",
"_score": null,
"_source": {
"username": "d",
"job": "ruby engineer",
"age": 23,
"birth": "1989-08-02",
"isMarried": false,
"salary": 10000
},
"sort": [
23
]
}
]
}
}
}
]
}
}
}
bucket聚合分析
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"jobs": {
"terms": {
"field": "job.keyword"
}
}
}
}
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"jobs": {
"terms": {
"field": "job.keyword",
"size": 2
}
}
}
}
针对text类型做分桶,打开fielddata打开true
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"salary_range": {
"range": {
"field": "salary",
"ranges": [
{
"to": 10000,
"key": "<10000"
},
{
"from": 10000,
"to": 20000
},
{
"from": 20000,
"key": ">20000"
}
]
}
}
}
}
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"date_range_birth": {
"date_range": {
"field": "birth",
"format": "yyyy",
"ranges": [
{
"from": "1980",
"to": "1985"
},
{
"from": "1985",
"to": "1990"
},
{
"from": "1990"
}
]
}
}
}
}
对比仔细观察
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"salary_histogram": {
"histogram": {
"field": "salary",
"interval": 5000
},
"aggs": {
"top_hits_salary": {
"top_hits": {
"size": 5
}
}
}
}
}
}
查询结果
{
"took": 60,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 7,
"max_score": 0,
"hits": []
},
"aggregations": {
"salary_histogram": {
"buckets": [
{
"key": 5000,
"doc_count": 1,
"top_hits_salary": {
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "test_index_search",
"_type": "doc",
"_id": "1",
"_score": 1,
"_source": {
"username": "a",
"job": "java engineer",
"age": 18,
"birth": "1990-01-02",
"isMarried": false,
"salary": 5000
}
}
]
}
}
},
{
"key": 10000,
"doc_count": 4,
"top_hits_salary": {
"hits": {
"total": 4,
"max_score": 1,
"hits": [
{
"_index": "test_index_search",
"_type": "doc",
"_id": "7",
"_score": 1,
"_source": {
"username": "g",
"job": "php engineer",
"age": 25,
"birth": "1989-08-02",
"isMarried": false,
"salary": 13000
}
},
{
"_index": "test_index_search",
"_type": "doc",
"_id": "2",
"_score": 1,
"_source": {
"username": "b",
"job": "java engineer",
"age": 28,
"birth": "1980-05-07",
"isMarried": true,
"salary": 10000
}
},
{
"_index": "test_index_search",
"_type": "doc",
"_id": "4",
"_score": 1,
"_source": {
"username": "d",
"job": "ruby engineer",
"age": 23,
"birth": "1989-08-02",
"isMarried": false,
"salary": 10000
}
},
{
"_index": "test_index_search",
"_type": "doc",
"_id": "5",
"_score": 1,
"_source": {
"username": "e",
"job": "web engineer",
"age": 33,
"birth": "1989-08-02",
"isMarried": false,
"salary": 10000
}
}
]
}
}
},
{
"key": 15000,
"doc_count": 2,
"top_hits_salary": {
"hits": {
"total": 2,
"max_score": 1,
"hits": [
{
"_index": "test_index_search",
"_type": "doc",
"_id": "6",
"_score": 1,
"_source": {
"username": "f",
"job": "web engineer",
"age": 43,
"birth": "1989-08-02",
"isMarried": false,
"salary": 15000
}
},
{
"_index": "test_index_search",
"_type": "doc",
"_id": "3",
"_score": 1,
"_source": {
"username": "c",
"job": "java senior engineer",
"age": 22,
"birth": "1985-08-07",
"isMarried": false,
"salary": 15000
}
}
]
}
}
}
]
}
}
}
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"salary_histogram": {
"histogram": {
"field": "salary",
"interval": 5000,
"extended_bounds": {
"min": 0,
"max": 20000
}
},
"aggs": {
"top_hits_salary": {
"top_hits": {
"size": 5
}
}
}
}
}
}
查询结果
{
"took": 19,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 7,
"max_score": 0,
"hits": []
},
"aggregations": {
"salary_histogram": {
"buckets": [
{
"key": 0,
"doc_count": 0,
"top_hits_salary": {
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
},
{
"key": 5000,
"doc_count": 1,
"top_hits_salary": {
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "test_index_search",
"_type": "doc",
"_id": "1",
"_score": 1,
"_source": {
"username": "a",
"job": "java engineer",
"age": 18,
"birth": "1990-01-02",
"isMarried": false,
"salary": 5000
}
}
]
}
}
},
{
"key": 10000,
"doc_count": 4,
"top_hits_salary": {
"hits": {
"total": 4,
"max_score": 1,
"hits": [
{
"_index": "test_index_search",
"_type": "doc",
"_id": "7",
"_score": 1,
"_source": {
"username": "g",
"job": "php engineer",
"age": 25,
"birth": "1989-08-02",
"isMarried": false,
"salary": 13000
}
},
{
"_index": "test_index_search",
"_type": "doc",
"_id": "2",
"_score": 1,
"_source": {
"username": "b",
"job": "java engineer",
"age": 28,
"birth": "1980-05-07",
"isMarried": true,
"salary": 10000
}
},
{
"_index": "test_index_search",
"_type": "doc",
"_id": "4",
"_score": 1,
"_source": {
"username": "d",
"job": "ruby engineer",
"age": 23,
"birth": "1989-08-02",
"isMarried": false,
"salary": 10000
}
},
{
"_index": "test_index_search",
"_type": "doc",
"_id": "5",
"_score": 1,
"_source": {
"username": "e",
"job": "web engineer",
"age": 33,
"birth": "1989-08-02",
"isMarried": false,
"salary": 10000
}
}
]
}
}
},
{
"key": 15000,
"doc_count": 2,
"top_hits_salary": {
"hits": {
"total": 2,
"max_score": 1,
"hits": [
{
"_index": "test_index_search",
"_type": "doc",
"_id": "6",
"_score": 1,
"_source": {
"username": "f",
"job": "web engineer",
"age": 43,
"birth": "1989-08-02",
"isMarried": false,
"salary": 15000
}
},
{
"_index": "test_index_search",
"_type": "doc",
"_id": "3",
"_score": 1,
"_source": {
"username": "c",
"job": "java senior engineer",
"age": 22,
"birth": "1985-08-07",
"isMarried": false,
"salary": 15000
}
}
]
}
}
},
{
"key": 20000,
"doc_count": 0,
"top_hits_salary": {
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
}
]
}
}
}
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"date_histogram_birth": {
"date_histogram": {
"field": "birth",
"interval": "year",
"format": "yyyy",
"extended_bounds": {
"min": "1979",
"max": "1991"
}
}
}
}
}
查询结果
{
"took": 31,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 7,
"max_score": 0,
"hits": []
},
"aggregations": {
"date_histogram_birth": {
"buckets": [
{
"key_as_string": "1979",
"key": 283996800000,
"doc_count": 0
},
{
"key_as_string": "1980",
"key": 315532800000,
"doc_count": 1
},
{
"key_as_string": "1981",
"key": 347155200000,
"doc_count": 0
},
{
"key_as_string": "1982",
"key": 378691200000,
"doc_count": 0
},
{
"key_as_string": "1983",
"key": 410227200000,
"doc_count": 0
},
{
"key_as_string": "1984",
"key": 441763200000,
"doc_count": 0
},
{
"key_as_string": "1985",
"key": 473385600000,
"doc_count": 1
},
{
"key_as_string": "1986",
"key": 504921600000,
"doc_count": 0
},
{
"key_as_string": "1987",
"key": 536457600000,
"doc_count": 0
},
{
"key_as_string": "1988",
"key": 567993600000,
"doc_count": 0
},
{
"key_as_string": "1989",
"key": 599616000000,
"doc_count": 4
},
{
"key_as_string": "1990",
"key": 631152000000,
"doc_count": 1
},
{
"key_as_string": "1991",
"key": 662688000000,
"doc_count": 0
}
]
}
}
}
bucket和metric聚合分析
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"terms_job": {
"terms": {
"field": "job.keyword",
"size": 10
},
"aggs": {
"range_age": {
"range": {
"field": "age",
"ranges": [
{
"to": 20
},
{
"from": 20,
"to": 25
},
{
"from": 25
}
]
}
}
}
}
}
}
查询结果
{
"took": 16,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 7,
"max_score": 0,
"hits": []
},
"aggregations": {
"terms_job": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "java engineer",
"doc_count": 2,
"range_age": {
"buckets": [
{
"key": "*-20.0",
"to": 20,
"doc_count": 1
},
{
"key": "20.0-25.0",
"from": 20,
"to": 25,
"doc_count": 0
},
{
"key": "25.0-*",
"from": 25,
"doc_count": 1
}
]
}
},
{
"key": "web engineer",
"doc_count": 2,
"range_age": {
"buckets": [
{
"key": "*-20.0",
"to": 20,
"doc_count": 0
},
{
"key": "20.0-25.0",
"from": 20,
"to": 25,
"doc_count": 0
},
{
"key": "25.0-*",
"from": 25,
"doc_count": 2
}
]
}
},
{
"key": "java senior engineer",
"doc_count": 1,
"range_age": {
"buckets": [
{
"key": "*-20.0",
"to": 20,
"doc_count": 0
},
{
"key": "20.0-25.0",
"from": 20,
"to": 25,
"doc_count": 1
},
{
"key": "25.0-*",
"from": 25,
"doc_count": 0
}
]
}
},
{
"key": "php engineer",
"doc_count": 1,
"range_age": {
"buckets": [
{
"key": "*-20.0",
"to": 20,
"doc_count": 0
},
{
"key": "20.0-25.0",
"from": 20,
"to": 25,
"doc_count": 0
},
{
"key": "25.0-*",
"from": 25,
"doc_count": 1
}
]
}
},
{
"key": "ruby engineer",
"doc_count": 1,
"range_age": {
"buckets": [
{
"key": "*-20.0",
"to": 20,
"doc_count": 0
},
{
"key": "20.0-25.0",
"from": 20,
"to": 25,
"doc_count": 1
},
{
"key": "25.0-*",
"from": 25,
"doc_count": 0
}
]
}
}
]
}
}
}
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"terms_job": {
"terms": {
"field": "job.keyword",
"size": 10
},
"aggs": {
"stats_salary": {
"stats": {
"field": "salary"
}
}
}
}
}
}
查询结果
{
"took": 101,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 7,
"max_score": 0,
"hits": []
},
"aggregations": {
"terms_job": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "java engineer",
"doc_count": 2,
"stats_salary": {
"count": 2,
"min": 5000,
"max": 10000,
"avg": 7500,
"sum": 15000
}
},
{
"key": "web engineer",
"doc_count": 2,
"stats_salary": {
"count": 2,
"min": 10000,
"max": 15000,
"avg": 12500,
"sum": 25000
}
},
{
"key": "java senior engineer",
"doc_count": 1,
"stats_salary": {
"count": 1,
"min": 15000,
"max": 15000,
"avg": 15000,
"sum": 15000
}
},
{
"key": "php engineer",
"doc_count": 1,
"stats_salary": {
"count": 1,
"min": 13000,
"max": 13000,
"avg": 13000,
"sum": 13000
}
},
{
"key": "ruby engineer",
"doc_count": 1,
"stats_salary": {
"count": 1,
"min": 10000,
"max": 10000,
"avg": 10000,
"sum": 10000
}
}
]
}
}
}
pipeline聚合分析
min_bucket
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"terms_job": {
"terms": {
"field": "job.keyword",
"size": 10
},
"aggs": {
"avg_salary": {
"avg": {
"field": "salary"
}
}
}
},
"min_bucket_by_salary": {
"min_bucket": {
"buckets_path": "terms_job>avg_salary"
}
}
}
}
查询结果
{
"took": 32,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 7,
"max_score": 0,
"hits": []
},
"aggregations": {
"terms_job": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "java engineer",
"doc_count": 2,
"avg_salary": {
"value": 7500
}
},
{
"key": "web engineer",
"doc_count": 2,
"avg_salary": {
"value": 12500
}
},
{
"key": "java senior engineer",
"doc_count": 1,
"avg_salary": {
"value": 15000
}
},
{
"key": "php engineer",
"doc_count": 1,
"avg_salary": {
"value": 13000
}
},
{
"key": "ruby engineer",
"doc_count": 1,
"avg_salary": {
"value": 10000
}
}
]
},
"min_bucket_by_salary": {
"value": 7500,
"keys": [
"java engineer"
]
}
}
}
max_bucket
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"terms_job": {
"terms": {
"field": "job.keyword",
"size": 10
},
"aggs": {
"avg_salary": {
"avg": {
"field": "salary"
}
}
}
},
"max_bucket_by_salary": {
"max_bucket": {
"buckets_path": "terms_job>avg_salary"
}
}
}
}
查询结果
{
"took": 27,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 7,
"max_score": 0,
"hits": []
},
"aggregations": {
"terms_job": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "java engineer",
"doc_count": 2,
"avg_salary": {
"value": 7500
}
},
{
"key": "web engineer",
"doc_count": 2,
"avg_salary": {
"value": 12500
}
},
{
"key": "java senior engineer",
"doc_count": 1,
"avg_salary": {
"value": 15000
}
},
{
"key": "php engineer",
"doc_count": 1,
"avg_salary": {
"value": 13000
}
},
{
"key": "ruby engineer",
"doc_count": 1,
"avg_salary": {
"value": 10000
}
}
]
},
"max_bucket_by_salary": {
"value": 15000,
"keys": [
"java senior engineer"
]
}
}
}
sum_bucket
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"terms_job": {
"terms": {
"field": "job.keyword",
"size": 10
},
"aggs": {
"avg_salary": {
"avg": {
"field": "salary"
}
}
}
},
"sum_bucket_by_salary": {
"sum_bucket": {
"buckets_path": "terms_job>avg_salary"
}
}
}
}
查询结果
{
"took": 19,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 7,
"max_score": 0,
"hits": []
},
"aggregations": {
"terms_job": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "java engineer",
"doc_count": 2,
"avg_salary": {
"value": 7500
}
},
{
"key": "web engineer",
"doc_count": 2,
"avg_salary": {
"value": 12500
}
},
{
"key": "java senior engineer",
"doc_count": 1,
"avg_salary": {
"value": 15000
}
},
{
"key": "php engineer",
"doc_count": 1,
"avg_salary": {
"value": 13000
}
},
{
"key": "ruby engineer",
"doc_count": 1,
"avg_salary": {
"value": 10000
}
}
]
},
"sum_bucket_by_salary": {
"value": 58000
}
}
}
stats_bucket
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"terms_job": {
"terms": {
"field": "job.keyword",
"size": 10
},
"aggs": {
"avg_salary": {
"avg": {
"field": "salary"
}
}
}
},
"stats_bucket_by_salary": {
"stats_bucket": {
"buckets_path": "terms_job>avg_salary"
}
}
}
}
查询结果
{
"took": 18,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 7,
"max_score": 0,
"hits": []
},
"aggregations": {
"terms_job": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "java engineer",
"doc_count": 2,
"avg_salary": {
"value": 7500
}
},
{
"key": "web engineer",
"doc_count": 2,
"avg_salary": {
"value": 12500
}
},
{
"key": "java senior engineer",
"doc_count": 1,
"avg_salary": {
"value": 15000
}
},
{
"key": "php engineer",
"doc_count": 1,
"avg_salary": {
"value": 13000
}
},
{
"key": "ruby engineer",
"doc_count": 1,
"avg_salary": {
"value": 10000
}
}
]
},
"stats_bucket_by_salary": {
"count": 5,
"min": 7500,
"max": 15000,
"avg": 11600,
"sum": 58000
}
}
}
percentiles_bucket
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"terms_job": {
"terms": {
"field": "job.keyword",
"size": 10
},
"aggs": {
"avg_salary": {
"avg": {
"field": "salary"
}
}
}
},
"percentiles_bucket_by_salary": {
"percentiles_bucket": {
"buckets_path": "terms_job>avg_salary"
}
}
}
}
查询结果
{
"took": 46,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 7,
"max_score": 0,
"hits": []
},
"aggregations": {
"terms_job": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "java engineer",
"doc_count": 2,
"avg_salary": {
"value": 7500
}
},
{
"key": "web engineer",
"doc_count": 2,
"avg_salary": {
"value": 12500
}
},
{
"key": "java senior engineer",
"doc_count": 1,
"avg_salary": {
"value": 15000
}
},
{
"key": "php engineer",
"doc_count": 1,
"avg_salary": {
"value": 13000
}
},
{
"key": "ruby engineer",
"doc_count": 1,
"avg_salary": {
"value": 10000
}
}
]
},
"percentiles_bucket_by_salary": {
"values": {
"1.0": 7500,
"5.0": 7500,
"25.0": 10000,
"50.0": 12500,
"75.0": 13000,
"95.0": 15000,
"99.0": 15000
}
}
}
}
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"birth": {
"date_histogram": {
"field": "birth",
"interval": "year",
"min_doc_count": 0
},
"aggs": {
"avg_salary": {
"avg": {
"field": "salary"
}
},
"derivative_avg_salary": {
"derivative": {
"buckets_path": "avg_salary"
}
}
}
}
}
}
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"birth": {
"date_histogram": {
"field": "birth",
"interval": "year",
"min_doc_count": 0
},
"aggs": {
"avg_salary": {
"avg": {
"field": "salary"
}
},
"moving_avg_salary": {
"moving_avg": {
"buckets_path": "avg_salary"
}
}
}
}
}
}
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"birth": {
"date_histogram": {
"field": "birth",
"interval": "year",
"min_doc_count": 0
},
"aggs": {
"avg_salary": {
"avg": {
"field": "salary"
}
},
"cumulative_sum_avg_salary": {
"cumulative_sum": {
"buckets_path": "avg_salary"
}
}
}
}
}
}
查询结果
{
"took": 38,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 7,
"max_score": 0,
"hits": []
},
"aggregations": {
"birth": {
"buckets": [
{
"key_as_string": "1980-01-01T00:00:00.000Z",
"key": 315532800000,
"doc_count": 1,
"avg_salary": {
"value": 10000
},
"cumulative_sum_avg_salary": {
"value": 10000
}
},
{
"key_as_string": "1981-01-01T00:00:00.000Z",
"key": 347155200000,
"doc_count": 0,
"avg_salary": {
"value": null
},
"cumulative_sum_avg_salary": {
"value": 10000
}
},
{
"key_as_string": "1982-01-01T00:00:00.000Z",
"key": 378691200000,
"doc_count": 0,
"avg_salary": {
"value": null
},
"cumulative_sum_avg_salary": {
"value": 10000
}
},
{
"key_as_string": "1983-01-01T00:00:00.000Z",
"key": 410227200000,
"doc_count": 0,
"avg_salary": {
"value": null
},
"cumulative_sum_avg_salary": {
"value": 10000
}
},
{
"key_as_string": "1984-01-01T00:00:00.000Z",
"key": 441763200000,
"doc_count": 0,
"avg_salary": {
"value": null
},
"cumulative_sum_avg_salary": {
"value": 10000
}
},
{
"key_as_string": "1985-01-01T00:00:00.000Z",
"key": 473385600000,
"doc_count": 1,
"avg_salary": {
"value": 15000
},
"cumulative_sum_avg_salary": {
"value": 25000
}
},
{
"key_as_string": "1986-01-01T00:00:00.000Z",
"key": 504921600000,
"doc_count": 0,
"avg_salary": {
"value": null
},
"cumulative_sum_avg_salary": {
"value": 25000
}
},
{
"key_as_string": "1987-01-01T00:00:00.000Z",
"key": 536457600000,
"doc_count": 0,
"avg_salary": {
"value": null
},
"cumulative_sum_avg_salary": {
"value": 25000
}
},
{
"key_as_string": "1988-01-01T00:00:00.000Z",
"key": 567993600000,
"doc_count": 0,
"avg_salary": {
"value": null
},
"cumulative_sum_avg_salary": {
"value": 25000
}
},
{
"key_as_string": "1989-01-01T00:00:00.000Z",
"key": 599616000000,
"doc_count": 4,
"avg_salary": {
"value": 12000
},
"cumulative_sum_avg_salary": {
"value": 37000
}
},
{
"key_as_string": "1990-01-01T00:00:00.000Z",
"key": 631152000000,
"doc_count": 1,
"avg_salary": {
"value": 5000
},
"cumulative_sum_avg_salary": {
"value": 42000
}
}
]
}
}
}
作用范围
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"jobs_salary_small": {
"filter": {
"range": {
"salary": {
"lte": 10000
}
}
},
"aggs": {
"jobs": {
"terms": {
"field": "job.keyword",
"size": 10
}
}
}
},
"jobs": {
"terms": {
"field": "job.keyword",
"size": 10
}
}
}
}
查询结果
{
"took": 20,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 7,
"max_score": 0,
"hits": []
},
"aggregations": {
"jobs_salary_small": {
"doc_count": 4,
"jobs": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "java engineer",
"doc_count": 2
},
{
"key": "ruby engineer",
"doc_count": 1
},
{
"key": "web engineer",
"doc_count": 1
}
]
}
},
"jobs": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "java engineer",
"doc_count": 2
},
{
"key": "web engineer",
"doc_count": 2
},
{
"key": "java senior engineer",
"doc_count": 1
},
{
"key": "php engineer",
"doc_count": 1
},
{
"key": "ruby engineer",
"doc_count": 1
}
]
}
}
}
GET test_index_search/doc/_search
{
"aggs": {
"jobs": {
"terms": {
"field": "job.keyword",
"size": 10
}
}
},
"post_filter": {
"match": {
"job.keyword": "java engineer"
}
}
}
查询结果
{
"took": 36,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 1,
"hits": [
{
"_index": "test_index_search",
"_type": "doc",
"_id": "2",
"_score": 1,
"_source": {
"username": "b",
"job": "java engineer",
"age": 28,
"birth": "1980-05-07",
"isMarried": true,
"salary": 10000
}
},
{
"_index": "test_index_search",
"_type": "doc",
"_id": "1",
"_score": 1,
"_source": {
"username": "a",
"job": "java engineer",
"age": 18,
"birth": "1990-01-02",
"isMarried": false,
"salary": 5000
}
}
]
},
"aggregations": {
"jobs": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "java engineer",
"doc_count": 2
},
{
"key": "web engineer",
"doc_count": 2
},
{
"key": "java senior engineer",
"doc_count": 1
},
{
"key": "php engineer",
"doc_count": 1
},
{
"key": "ruby engineer",
"doc_count": 1
}
]
}
}
}
GET test_index_search/doc/_search
{
"query": {
"match": {
"job.keyword": "java engineer"
}
},
"aggs": {
"java_avg_salary": {
"avg": {
"field": "salary"
}
},
"all": {
"global": {},
"aggs": {
"avg_salary": {
"avg": {
"field": "salary"
}
}
}
}
}
}
查询结果
{
"took": 8,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0.9808292,
"hits": [
{
"_index": "test_index_search",
"_type": "doc",
"_id": "2",
"_score": 0.9808292,
"_source": {
"username": "b",
"job": "java engineer",
"age": 28,
"birth": "1980-05-07",
"isMarried": true,
"salary": 10000
}
},
{
"_index": "test_index_search",
"_type": "doc",
"_id": "1",
"_score": 0.6931472,
"_source": {
"username": "a",
"job": "java engineer",
"age": 18,
"birth": "1990-01-02",
"isMarried": false,
"salary": 5000
}
}
]
},
"aggregations": {
"all": {
"doc_count": 7,
"avg_salary": {
"value": 11142.857142857143
}
},
"java_avg_salary": {
"value": 7500
}
}
}
排序
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"terms_job": {
"terms": {
"field": "job.keyword",
"size": 10,
"order": [
{
"_count": "asc"
},
{
"_key": "asc"
}
]
}
}
}
}
查询结果
{
"took": 23,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 7,
"max_score": 0,
"hits": []
},
"aggregations": {
"terms_job": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "java senior engineer",
"doc_count": 1
},
{
"key": "php engineer",
"doc_count": 1
},
{
"key": "ruby engineer",
"doc_count": 1
},
{
"key": "java engineer",
"doc_count": 2
},
{
"key": "web engineer",
"doc_count": 2
}
]
}
}
}
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"histogram_salary": {
"histogram": {
"field": "salary",
"interval": 5000,
"order": {
"age>avg_age": "desc"
}
},
"aggs": {
"age": {
"filter": {
"range": {
"age": {
"gte": 10
}
}
},
"aggs": {
"avg_age": {
"avg": {
"field": "age"
}
},
"max_age": {
"max": {
"field": "age"
}
}
}
}
}
}
}
}
查询结果
{
"took": 24,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 7,
"max_score": 0,
"hits": []
},
"aggregations": {
"histogram_salary": {
"buckets": [
{
"key": 15000,
"doc_count": 2,
"age": {
"doc_count": 2,
"max_age": {
"value": 43
},
"avg_age": {
"value": 32.5
}
}
},
{
"key": 10000,
"doc_count": 4,
"age": {
"doc_count": 4,
"max_age": {
"value": 33
},
"avg_age": {
"value": 27.25
}
}
},
{
"key": 5000,
"doc_count": 1,
"age": {
"doc_count": 1,
"max_age": {
"value": 18
},
"avg_age": {
"value": 18
}
}
}
]
}
}
}
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"histogram_salary": {
"histogram": {
"field": "salary",
"interval": 5000,
"order": {
"age>stats_age.avg": "desc"
}
},
"aggs": {
"age": {
"filter": {
"range": {
"age": {
"gte": 10
}
}
},
"aggs": {
"stats_age": {
"stats": {
"field": "age"
}
}
}
}
}
}
}
}
查询结果
{
"took": 22,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 7,
"max_score": 0,
"hits": []
},
"aggregations": {
"histogram_salary": {
"buckets": [
{
"key": 15000,
"doc_count": 2,
"age": {
"doc_count": 2,
"stats_age": {
"count": 2,
"min": 22,
"max": 43,
"avg": 32.5,
"sum": 65
}
}
},
{
"key": 10000,
"doc_count": 4,
"age": {
"doc_count": 4,
"stats_age": {
"count": 4,
"min": 23,
"max": 33,
"avg": 27.25,
"sum": 109
}
}
},
{
"key": 5000,
"doc_count": 1,
"age": {
"doc_count": 1,
"stats_age": {
"count": 1,
"min": 18,
"max": 18,
"avg": 18,
"sum": 18
}
}
}
]
}
}
}
原理与精准度问题
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"jobs": {
"terms": {
"field": "job.keyword",
"size": 1,
"shard_size": 1,
"show_term_doc_count_error": true
}
}
}
}
{
"took": 55,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 7,
"max_score": 0,
"hits": []
},
"aggregations": {
"jobs": {
"doc_count_error_upper_bound": 4,
"sum_other_doc_count": 5,
"buckets": [
{
"key": "java engineer",
"doc_count": 2,
"doc_count_error_upper_bound": 3
}
]
}
}
}
GET test_index_search/doc/_search
{
"size": 0,
"aggs": {
"jobs": {
"terms": {
"field": "job.keyword",
"size": 5,
"shard_size": 10,
"show_term_doc_count_error": true
}
}
}
}
{
"took": 13,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 7,
"max_score": 0,
"hits": []
},
"aggregations": {
"jobs": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "java engineer",
"doc_count": 2,
"doc_count_error_upper_bound": 0
},
{
"key": "web engineer",
"doc_count": 2,
"doc_count_error_upper_bound": 0
},
{
"key": "java senior engineer",
"doc_count": 1,
"doc_count_error_upper_bound": 0
},
{
"key": "php engineer",
"doc_count": 1,
"doc_count_error_upper_bound": 0
},
{
"key": "ruby engineer",
"doc_count": 1,
"doc_count_error_upper_bound": 0
}
]
}
}
}
GET student_course
GET student_course/doc/_search
GET student_course/doc/_search
{
"size": 0,
"aggs": {
"student_course_count": {
"cardinality": {
"field": "_id"
}
}
}
}
GET student_course/doc/_search
{
"size": 0,
"aggs": {
"studentNumberCount": {
"terms": {
"field": "studentNumber.keyword",
"size": 1,
"show_term_doc_count_error": true
}
}
}
}
GET student_course/doc/_search
{
"size": 0,
"aggs": {
"studentNumberCount": {
"terms": {
"field": "studentNumber.keyword",
"size": 1,
"shard_size": 100,
"show_term_doc_count_error": true
}
}
}
}
GET student_course/doc/_search
{
"size": 0,
"aggs": {
"studentNumberCount": {
"terms": {
"field": "studentNumber.keyword",
"size": 1,
"shard_size": 150,
"show_term_doc_count_error": true
}
}
}
}