当docs.count增加时,ElasticSearch索引大小减小

时间:2017-08-08 00:50:31

标签: elasticsearch elasticsearch-5

我注意到ElasticSearch(版本5.5.0)中存在一种奇怪的行为,其中store.size减少而docs.count增加。为什么会这样?

$ curl 'localhost:9201/_cat/indices/index-name:2017-08-08?bytes=b&v'
health status index                 uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   index-name:2017-08-08 PlpLYu5vTN-HFA_ygHUNwg  17   1    5577181       212434 3827072602     1939889776

$ curl 'localhost:9201/_cat/indices/index-name:2017-08-08?bytes=b&v'
health status index                 uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   index-name:2017-08-08 PlpLYu5vTN-HFA_ygHUNwg  17   1    5581202       204815 3812410150     1927833617

请注意,虽然docs.count从5577181-> 5581202增加,但store.size和pri.store.size都减少了。

对于后台,我尝试使用索引大小来限制进入ES的数据(即每天xGB)。但是,我注意到,当我继续索引时,索引大小会定期减少(每小时或几分钟左右)。由于存储大小不严格增加,因此这不是一种好的节流方式

1)知道为什么索引大小减少了吗? 2)我应该使用另一种尺寸严格增加的尺寸吗?

编辑: 实际上,即使没有删除的文档,文档计数仍会减少。见下文

$ curl -s localhost:9200/_cat/indices | grep name
green open index-name:2017-08-11                                 eIGiDgeZQ5CqSu3tAaLRgw  1 1   111717      0 210.4mb 109.5mb
$ curl -s localhost:9200/_cat/indices | grep name
green open index-name:2017-08-11                                 eIGiDgeZQ5CqSu3tAaLRgw  1 1   132329      0 204.7mb 103.2mb

2 个答案:

答案 0 :(得分:1)

所以你有4021个附加文件(= 5581202-5577181),但你也可以注意到已删除的文件docs.deleted的数量也减少了7619个文件(= 212434-204815),所以文件的净数量在你的指数是-3598。这是由于Lucene merging segments是为了清理已删除的文档并尝试重新获得一些未使用的空间。

这是整体索引大小减少14662452字节(~14 MB)的最可能原因

如果您想节流,可以使用docs.count代替,如果您不断编制索引,该数字应该会增加。

答案 1 :(得分:1)

Elasticsearch集群会随着时间压缩索引-因此_stats api操作可能会显示索引大小缩小(直到停止)。对于相似的文档,索引甚至可以压缩40%。

编辑:如上所述,只要对文档建立索引,引擎盖下的段合并就会随时间发生。在每个段合并之后,(模糊地)似乎在新段上发生了压缩,因此假设ES compression algo is a Linear Transformation then compress(A) + compress(B) >= compress(A+B)意味着索引大小可能会减小。