Python 比术语聚合更有效的聚合?
我有1003000份文件,其中大部分是重复的。我检查了术语聚合,发现我有245538个不同的键(我在这个表中有一个id字段) 这个聚合花费了大约1秒的时间,这很好。但是,我需要找到重复文档的“_id”。所以我对这个聚合做了一个聚合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
'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修复主数据库。如果你可以轻松地重新导入所有内容,那么最好总是修复主要数据源。