当前位置: 首页 > 面试题库 >

最少文档数的Elasticsearch过滤器聚合

杨研
2023-03-14
问题内容

我对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)?

提前致谢


问题答案:

下次,M’sieur Toph’:RTFM!

我真的很傻:问了30秒后,我在手册中找到了答案。我不会删除我的问题,因为它可以帮助谁知道…

这是答案:

您可以min_doc_countterms聚合中指定属性。

它给你:

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

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

还有什么 ?:)



 类似资料:
  • 我有一个返回一组文档(100)的查询。我想对这些应用一个聚合,因为这些是最相关的。当我尝试聚合时,它返回所有结果的聚合,而不是前100个结果的聚合。

  • 问题内容: 我正在尝试对数组中的值进行聚合,并且还过滤由前缀返回的存储桶。不知道这是否可行,或者我滥用过滤桶。 3份文件: 目的是获取带有字母B开头颜色的文档数量: 不幸的是,返回的结果包括Red。显然是因为带有红色的文档仍然按过滤器匹配,因为它们也具有蓝色和/或黑色。 有没有一种方法可以只过滤存储桶结果? 问题答案: 尝试此操作,它将过滤为存储桶本身创建的值:

  • 我想知道是否有办法在过滤掉elasticsearch文档后更新它们。 假设我有一个包含以下文档的用户集合: 现在我需要做的是更新所有30岁以上用户的名字。查看大量文档并在谷歌上搜索数小时,包括以下文档http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/_updating_documents.html 我找不到办

  • 问题内容: 我想过滤出字段“ A”等于“ a”的文档,并且我想同时考虑字段“ A”,当然不包括先前的过滤器。我知道您可以将过滤器“置于查询之外”,以便在不应用该过滤器的情况下获得构面,例如: elasticsearch 单反 这非常好,但是如果我有多个滤镜和构面,每个滤镜和构面应该互相排斥,会发生什么?例: 也就是说,对于方面AI,希望保留除A:a以外的所有过滤器,对于方面B希望保留除B:b以外的

  • 问题内容: 我试图了解ElasticSearch中过滤器聚合的语法,但很困惑。文档中给出的示例是这样的: 我了解以下内容: “ aggs”定义了聚合块(这是“聚合”的快捷方式)。可以看到,示例中实际上存在嵌套的聚合。 “消息”是聚合块的用户定义名称。 “错误”和“警告”是用于创建聚合“桶”的过滤器的用户定义名称。他们删除“正文”分别等于“错误”和“警告”(匹配“术语”)的项目。 我不明白的是为什么

  • 问题内容: 我阅读了有关Lucene限制2Gb文档的说明。在Elasticsearch中可以建立索引的文档大小是否还有其他限制? 问题答案: Lucene内部使用一个字节缓冲区,该缓冲区使用32位整数进行寻址。根据定义,这限制了文档的大小。因此,理论上最大2GB。 在ElasticSearch中: ES GitHub代码中有一个,并将其设置为或。因此,基本上, 2GB是通过HTTP进行批量索引的最