Elasticsearch过滤聚合功能中的最小文档计数。

12

我对Elasticsearch非常陌生。

假设我在两个字段 field1field2 上有一个嵌套聚合:

{
    ...
    aggs: {
        field1: {
            terms: {
                field: 'field1'
            },
            aggs: {
                field2: {
                    terms: {
                        field: 'field2'
                    }
                }
            }
        }
    }
}

这段代码完美运行,给我了这样的东西:

aggregations: {
    field1: {
        buckets: [{
            key: "foo",
            doc_count: 123456,
            field2: {
                buckets: [{
                    key: "bar",
                    doc_count: 34323
                },{
                    key: "baz",
                    doc_count: 10
                },{
                    key: "foobar",
                    doc_count: 36785
                },
                ...
                ]
        },{
            key: "fooOO",
            doc_count: 423424,
            field2: {
                buckets: [{
                    key: "bar",
                    doc_count: 35
                },{
                    key: "baz",
                    doc_count: 2435453
                },
                ...
                ]
        },
        ...
        ]
    }
}

现在,我的需求是排除所有聚合结果,其中 doc_count 小于 1000,例如,并获取以下结果:

aggregations: {
    field1: {
        buckets: [{
            key: "foo",
            doc_count: 123456,
            field2: {
                buckets: [{
                    key: "bar",
                    doc_count: 34323
                },{
                    key: "foobar",
                    doc_count: 36785
                },
                ...
                ]
        },{
            key: "fooOO",
            doc_count: 423424,
            field2: {
                buckets: [{
                    key: "baz",
                    doc_count: 2435453
                },
                ...
                ]
        },
        ...
        ]
    }
}

我是否可以在查询体中设置此需求?还是我必须在调用者布局中执行过滤(在我的情况下是JavaScript)?

提前致谢。

1个回答

26
下次再请教,托费先生:RTFM!!!
我感觉很蠢:我在问问题后30秒就在手册中找到了答案。我不会删除我的问题,因为它可能有帮助,谁知道呢...
这就是答案:
您可以在“terms”聚合中指定“min_doc_count”属性。
它会给你:
{
    ...
    aggs: {
        field1: {
            terms: {
                field: 'field1',
                min_doc_count: 1000
            },
            aggs: {
                field2: {
                    terms: {
                        field: 'field2',
                        min_doc_count: 1000
                    }
                }
            }
        }
    }
}

你还可以为聚合的每个级别指定特定的最小计数。

还有什么问题吗?:)


确实有帮助..即使我错过了这个属性。 - User3518958

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接