es 基础聚合
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了es 基础聚合相关的知识,希望对你有一定的参考价值。
参考技术A 通过搜索,我们可找到匹配查询条件的文档集;通过聚合,我们会得到一个数据的概念,以汽车销售信息为例,以下都是聚合数据:
学习Elasticsearch聚合的第一步就是理解两个概念:桶(Buckets)和指标(Metrics)
桶是指满足特定条件的文档的集合,例如按照汽车颜色分类,如下图,每个颜色都有一个桶,里面放的是所有这个颜色的文档:
指标是对桶内的文档进行统计计算,如统计红色汽车的数量、最低价、最高价、平均售价、总销售额等,这些都是根据桶中的文档的值来计算的;
基本概念有所了解后一起通过实战来学习和掌握聚合的知识;
以下是本次实战的环境信息,请确保您的Elasticsearch可以正常运行:
本次实战用到的数据来自《Elasticsearch权威指南》的示例;
通过head插件看到新建的索引cars的所有数据如下图,例如第一条记录,表示售价30000,汽车颜色是绿色,品牌是ford,销售时间是2014年5月8日:
第一个聚合命令是terms桶,相当于SQL中的group by,将所有记录按照颜色聚合,执行以下查询命令:
收到响应如下:
现在对查询命令中的参数做出解释:
收到响应如下:
至此,Elasticsearch6的基本聚合操作就完成了,接下来的文章我们会接触到更复杂的聚合操作;
[学习ES系列]-4.ElasticSearch基础交互-基础查询与高级查询
基础查询
- 1.简单查询
{
"query":{
"match_all":{}
}
}
- 2.条件查询
{
"query":{
"match":{
"title":"入门到精通"
}
},
"from":1,
"size":5,
"sort":{
"publish_date":{
"order":"asc"
}
}
}
- 3.聚合查询
{
"aggs":{
"group_by_word_count":{
"terms":{
"field":"word_count"
}
},
"group_by_publish_date":{
"terms":{
"field":"publish_date"
}
}
}
}
{
"aggs":{
"total_word_count":{
"stats":{
"field":"word_count"
}
}
}
}
{
"aggs":{
"max_word_count":{
"max":{
"field":"word_count"
}
}
}
}
高级查询
1.子条件查询 又称叶子条件查询(特定字段查询所指特定的值)
- 1.1Query Context
在查询的过程中,除了判断文档是否满足查询条件外,ES还会计算一个_score来标识匹配的程度,旨在判断目标文档和查询条件的匹配程度有多好。
1.1.1全文本查询:针对文本类型(text)的数据
- --1.模糊匹配
{
"query":{
"match":{
"title":"PHP从入门到精通"
}
}
}
会匹配PHP、从入门到精通两个关键词
- --2.习语匹配
{
"query":{
"match_phrase":{
"title":"PHP从入门到精通"
}
}
}
- --3.多个字段模糊匹配查询
{
"query":{
"multi_match":{
"query":"PHP",
"fields":["title","author"]
}
}
}
查询title或author中包含PHP关键字
- --4.1语法查询
{
"query":{
"query_string":{
"query":"(PHP AND 入门) OR 普改"
}
}
}
文本字段同时包含PHP和入门两个关键词或者文本字段包含普改
- --4.2查询多字段(指定字段查询)
{
"query":{
"query_string":{
"query":"PHP",
"fields":["title","author"]
}
}
}
- 1.1.2字段级别查询:针对结构化数据,如数字、日期等
- --1.指定字段精确查询
{
"query":{
"term":{
"author":"普改"
}
}
}
- --2.范围查询
- --2.1数字范围
{
"query":{
"range":{
"word_count":{
"gte":"170000",
"lte":"200000"
}
}
}
}
- --2.2日期范围
{
"query":{
"range":{
"publish_date":{
"gte":"2018-01-01",
"lte":"2019-12-30"
}
}
}
}
{
"query":{
"range":{
"publish_date":{
"gte":"2019-01-01",
"lte":"now"
}
}
}
}
1.2Filter Context
在查询过程中,只判断该文档是否满足条件,只有yes或者no.
(query判断yes或者no,还会_score匹配程度)
ES会对查询结果做缓存,故速度比Query要快
{
"query":{
"bool":{
"filter":{
"term":{
"author":"普改"
}
}
}
}
}
2.复合条件查询(以一定的逻辑组合子查询查询)
以上是关于es 基础聚合的主要内容,如果未能解决你的问题,请参考以下文章