Elasticsearch 篇之聚合分析入门

设置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
      }
    }
  }
}

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值