本篇主要学习DSL格式的ElasticSearch查询语法,了解Filter的作用,了解常用的聚合。在开工之前我们需要强调一点,这也是我刚接触ES时进入的一个误区,虽然在某种程度上查询搜索ES与oracle、mysql等数据库有一些相似性,但是根本的区别是ES是个搜索引擎,他除开能过滤出我们想要的记录以外还增加了评分的能力,也就是“智能数据库”。
此外,match还有几个变种(match_all、match_phrase、match_phrase_prefix等)就不一一介绍了,用到时候自己再翻翻文档。Bool:跟关系型数据库的where里的一个过滤条件类似,bool里的结果只有true和false,必须为true时才满足过滤条件。GETmy_index/customer/_search{
Bool里可以有must、must_not、should、以及他们的组合,must表示条件必须全部满足,must_not表示条件必须全部不能满足,should标识条件只要满足部分。Filter:过滤条件,我们进行搜索前直接去索引中通过某些不参与打分的条件过滤掉一些记录(时间、数值范围、精准字符等),以减少搜索范围提高后续搜索索引的效率,filter结果会被缓存。
Elasticsearch具有称为聚合的功能,允许您对数据生成复杂的分组和分析,像是Oracle中的groupby、avg等,而且更强大。Metric聚合先看运算,跟Oracle类似有sum、max、min、avg、count等,在ES中可以单独算某一种运算外,还提供了一个stats参数,一次请求把以上所有结果都返回出来。
Bucket聚合桶子的意思,根据条件把数据按照木桶封装好,有点Oracle中groupby的意思,理解这个脑子里得有点空间想象的能力。请求:我要按照年龄把文档按桶子分分类。GETmy_index/customer/_search{返回:{每个年龄都有一桶记录在里面,默认是按照桶里数据多少来排序的,可以在field后添加
还可以与前面的运算嵌套使用,我想算一下每个年龄存款的平均水平:GETmy_index/customer/_search{
最后我们用一个稍微复杂些的例子总结下本篇所有内容:搜索住在UT州的,家庭地址里有“Street”这个关键字的,每个年龄的平均存款GETmy_index/customer/_search{
领取专属 10元无门槛券
私享最新 技术干货