elasticsearch,nosql,duplicates,Python,Performance,elasticsearch,Nosql,Duplicates" /> elasticsearch,nosql,duplicates,Python,Performance,elasticsearch,Nosql,Duplicates" />

Python 比术语聚合更有效的聚合?

Python 比术语聚合更有效的聚合?,python,performance,elasticsearch,nosql,duplicates,Python,Performance,elasticsearch,Nosql,Duplicates,我有1003000份文件,其中大部分是重复的。我检查了术语聚合,发现我有245538个不同的键(我在这个表中有一个id字段) 这个聚合花费了大约1秒的时间,这很好。但是,我需要找到重复文档的“_id”。所以我对这个聚合做了一个聚合 'aggs': { 'dupcount': { 'terms': { 'field': 'id', 'min_doc_count': 2, 'size': 300000

我有1003000份文件,其中大部分是重复的。我检查了术语聚合,发现我有245538个不同的键(我在这个表中有一个id字段)

这个聚合花费了大约1秒的时间,这很好。但是,我需要找到重复文档的“_id”。所以我对这个聚合做了一个聚合

'aggs': {
    'dupcount': {
        'terms': {
            'field': 'id',
            'min_doc_count': 2,
            'size': 300000
        },
        'aggs': {
            'dupdoc': {
                'top_hits': {
                    'size': 16
                }
            }
        }
    }
}
顶部点击的大小为16,因为1个键的最大重复数为16

不幸的是,这对集群本身来说太重了,它关闭了

另一个选项是使用扫描api,但它需要大约20秒,这太多了。那么,在这种情况下,是否有更高效、更稳定的聚合来发现重复项


我将ElasticSearch 6.3与python一起使用,提前感谢。

您可以进行的一个优化是将
\u source:false
添加到最热门的点击聚合中,因为您只需要idStill关闭或花费太多时间。是的,对于300K存储桶,这是非常合理的。你为什么不拿更少的水桶(比如1000个),把它们修好,冲洗干净,然后用下一个1000个重复,等等?(分而治之)问题是elasticsearch不是主数据库,所以我需要先修复主数据库,我并不在乎修复elastic数据库需要多少时间。如果我照你说的做,最好是使用sql或scan api修复主数据库。如果你可以轻松地重新导入所有内容,那么最好总是修复主要数据源。