2014-12-04 86 views
3

我在Debian服务器上安装了Elasticsearch 1.2.2,其索引文件大约为5.3M。当我运行myindex/_stats,我得到以下信息:Elasticsearch:如何减少磁盘使用量

{ 
    "_shards": { 
     "total": 10, 
     "successful": 5, 
     "failed": 0 
    }, 
    "_all": { 
     "primaries": { 
     "docs": { 
      "count": 5306837, 
      "deleted": 100209 
     }, 
     "store": { 
      "size_in_bytes": 32003706527, 
      "throttle_time_in_millis": 1657592 
     }, 
    .... 
} 

还告诉我,我的文档的总大小等于〜32 GB

然而,数据文件夹中的elasticsearch大小文件夹是72GB

Elasticsearch doc,我已经试过运行

curl -XPOST 'http://localhost:9200/myindex/_optimize?only_expunge_deletes=true' 

运行此命令有

  • 减小删除文档的数量从300K到100K(由_stats返回的上述命令),但不为0,因为我本来期望
  • 从90G减少磁盘使用到72G,而不是32G这是我的文档的实际尺寸

(注:我也跑了所有的索引此命令= curl -XPOST 'http://localhost:9200/_optimize?only_expunge_deletes=true,无显著差异)

怎么办我将数据文件夹的大小减少到我的文档的实际大小?

回答

0

您应该运行以下命令:

curl -XPOST 'http://localhost:9200/myindex/_optimize?max_num_segments=1 

也许你应该运行它不止一次。 (因为如果分段太多,将无法一步加入所有分段。)

+0

感谢您的答复。我试了一下,花了45分钟运行,但不幸的是,它并没有减少磁盘使用量 – benoit 2014-12-04 12:22:13

3

默认情况下,elasticsearch仅在删除百分比超过10%时合并掉一个分段。如果要删除索引中标记为已删除的所有文档,则应更改elasticsearch.yml中的index.merge.policy.expunge_deletes_allowed并将其设置为0,然后运行optimize命令:

curl -XPOST'http://localhost:9200/myindex/_optimize?only_expunge_deletes=true'

有关合并策略的更多详细信息,您可以查看at this link

0

我认为你看到的大小差异与索引和文档元数据有关,这对任何数据库都是正常的。索引的大小取决于您的映射。所以在技术上,您的文档大小将永远不会与elasticsearch数据文件夹的大小相同。

以下链接可能有助于解释这更好:

Using too much disk space

Elastic blog about storage requirements