elasticsearch中的filter与aggs

今天在ES上做了一个聚合,先过滤一个嵌套对象,再对另一个域做聚合,但是过滤似乎没有起作用

{
    "size":0,
    "filter":{
        "nested":{
            "path":"nna_risks",
            "filter":{
                "exists":{
                    "field":"nna_risks.ina_id"
                }
            }
         }
    },
    "aggs":{
        "level0":{
            "terms":{
                "script":"doc[‘inp_type‘].value"
            }
        }
    }
}

结果如下:

took: 47
timed_out: false
? _shards{}
total: 25
successful: 25
failed: 0
? hits{}
total: 31470
max_score: 0
? hits[]
? aggregations{}
? level0{}
doc_count_error_upper_bound: 0
sum_other_doc_count: 0
? buckets[]
key: "2"
doc_count: 147617
key: "5"
doc_count: 139434
key: "3"
doc_count: 47220
key: "1"
doc_count: 24580
key: "4"
doc_count: 10148

从结果上看,聚合到的数目相加与Hits不相等;分析后发现,聚合的数据不是来源于过滤后,而是整个数据集;

修改方法, 不用过滤,而是用查询过滤

{
    "size":0,
    "query":{
        "filtered":{
        "filter":{
            "nested":{
                "path":"nna_risks",
                "filter":{
                    "exists":{
                        "field":"nna_risks.ina_id"
                    }
                }
             }
        }
      }  },
    "aggs":{
        "level0":{
            "terms":{
                "script":"doc[‘inp_type‘].value"
            }
        }
    }
}

结果集:

took: 14
timed_out: false
? _shards{}
total: 25
successful: 25
failed: 0
? hits{}
total: 31617
max_score: 0
? hits[]
? aggregations{}
? level0{}
doc_count_error_upper_bound: 0
sum_other_doc_count: 0
? buckets[]
key: "3"
doc_count: 18634
key: "1"
doc_count: 7464
key: "2"
doc_count: 2845
key: "5"
doc_count: 1738
key: "4"
doc_count: 936

或者在聚合体中过滤:

{
    "size":0,
    "aggs":{
        "level0":{
            "filter":{
                "nested":{
                    "path":"nna_risks",
                    "filter":{
                        "exists":{
                            "field":"nna_risks.ina_id"
                        }
                    }
                }
            },
            "aggs":{
                "level1":{
                    "terms":{
                        "script":"doc[‘inp_type‘].value"
                    }
                }
            }
        }
    }
}

结果为:

took: 36
timed_out: false
? _shards{}
total: 25
successful: 25
failed: 0
? hits{}
total: 375035
max_score: 0
? hits[]
? aggregations{}
? level0{}
doc_count: 31836
? level1{}
doc_count_error_upper_bound: 0
sum_other_doc_count: 0
? buckets[]
key: "3"
doc_count: 18727
key: "1"
doc_count: 7525
key: "2"
doc_count: 2878
key: "5"
doc_count: 1743
key: "4"
doc_count: 963
时间: 2024-07-28 23:39:23

elasticsearch中的filter与aggs的相关文章

在Elasticsearch中实现统计异常检测器——第一部分

Implementing a Statistical Anomaly Detector in Elasticsearch - Part 1 该图显示了4500万个数据点的最小/最大/平均值(超过600小时的75,000个单独时间序列).这个图表中有八个大型的模拟中断,你能发现吗? 没有? 没关系,我也不行.当你将所有数据汇总到一个图表中时,你所有的数据变化往往可以平滑表示,除了最明显的变化.相比之下,这是从组成第一个图形的75,000系列中随机选择的: 这些单独的图表明确的显示可能发生中断的地方

elasticsearch中的mapping映射配置与查询典型案例

elasticsearch中的mapping映射配置示例比如要搭建个中文新闻信息的搜索引擎,新闻有"标题"."内容"."作者"."类型"."发布时间"这五个字段:我们要提供"标题和内容的检索"."排序"."高亮"."统计"."过滤"等一些基本功能.ES提供了smartcn的中文分词插件,测试的话建议使用IK分

Logstash:把MySQL数据导入到Elasticsearch中

前提条件 需要安装好Elasticsearch及Kibana. MySQL安装 根据不同的操作系统我们分别对MySQL进行安装.我们可以访问网页来对MySQL进行安装.等我们安装完我们的MySQL后,在我们的terminal中,打入如下的命令来检查MySQL的版本: $ /usr/local/mysql/bin/mysql -V /usr/local/mysql/bin/mysql Ver 8.0.17 for macos10.14 on x86_64 (MySQL Community Serv

Elasticsearch中的CRUD

在<玩玩儿Elasticsearch>中简介了一下elasticsearch.这篇文章.我们还是做些基础的学习.在Elasticsearch怎样进行CRUD? 如果我们正在创建的一个类似微博的应用.我们就姑且先叫它"kiwi"吧.kiwi这个应用就是一条条消息组成的. 在kiwi中,消息称为ksay.有两个部分组成.一是作者(author),而是消息本身(message). Create curl -X POST http://localhost:9200/kiwi/ksa

ElasticSearch中的一些概念

索引词(term) 在elasticsearch中索引词(term)是一个能够被索引的精确值.foo,Foo Foo几个单词是不相同的索引词.索引词(term)是可以通过term查询进行准确的搜索. 文本(text) 文本是一段普通的非结构化文字,通常,文本会被分析称一个个的索引词,存储在elasticsearch的索引库中,为了让文本能够进行搜索,文本字段需要事先进行分析:当对文本中的关键词进行查询的时候,搜索引擎应该根据搜索条件搜索出原文本. 分析(analysis) 分析是将文本转换为索引

elasticsearch中的几个概念总结

1.Geo spatial search : 地理空间搜索,可以在搜索查询中指定的某一距离内查找所要的内容,也能够返回以当前为圆心,逐渐增加圆的半径,直到找到所匹配到的内容. 参考:http://www.forwardsearch.dk/en/ForwardSearch/InDepth/Geo-spatial%20search.aspx 2.Multi tenancy:多租户 (1)Multi-tenancy means that different customers can have dif

统计elasticsearch中月每天索引量的脚本

随着业务量的不断上升,最近一段时间需要对生产环境中的elasticsearch集群中的历史索引数据做迁移,而在做迁移前需要对被迁移的elasticsearch索引数据做统计用于迁移后的验证统计,所以就写了一个脚本用于es数据中查询历史索引的量生成报表文件,而在其中有使用过jq工具用于取数,jq的介绍可以查看http://jim123.blog.51cto.com/4763600/1966964: #!/bin/bash #es_count_report.sh #used for elastics

ElasticSearch 中 _source 字段

有很多人会有这样的一个疑问: _source字段存储的是索引的原始内容,那 store 属性的设置是为何呢?elasticsearch 为什么要把 store 的默认取值设置为 no?设置为 yes 是否是重复的存储呢? 我们将一个 field 的值写入 elasticsearch 中,是想在这个 field 上执行 search 操作.但是,如果不显式的将该 field 的 store 属性设置为yes,同时 _source 字段 enabled 的情况下,你仍然可以获取到这个 field 的

图解Elasticsearch中的_source、_all、store和index属性

Elasticsearch中有几个关键属性容易混淆,很多人搞不清楚_source字段里存储的是什么?store属性的true或false和_source字段有什么关系?store属性设置为true和_all有什么关系?index属性又起到什么作用?什么时候设置store属性为true?什么时候应该开启_all字段?本文通过图解的方式,深入理解Elasticsearch中的_source._all.store和index属性. 图1 Elasticsearch中的_source._all.stor