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基础交互-基础查询与高级查询

基础查询

POST http://127.0.0.1:9200/book/_search

  • 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 基础聚合的主要内容,如果未能解决你的问题,请参考以下文章

[学习ES系列]-4.ElasticSearch基础交互-基础查询与高级查询

ES 使用指北

ES系列目录

链路聚合基础介绍

vue el-amap 如何重新初始化聚合

mongodb基础整理篇————聚合操作[三]