5.x中的弹性搜索索引大小比1.x

时间:2017-03-17 07:50:01

标签: elasticsearch

我有一个运行Elasticsearch 1.4.4的旧群集。 我的群集包含大约110亿个文档,所有原色的大小都在4TB左右。

我现在正在升级到Elasticsearch 5.2.2,这当然意味着重新索引我的数据。我有一个单独的集群,目前正在发生这种情况。我正在从源数据库重新编制索引,因为我在原始索引上禁用了_all_source

我现在已经重新编制了大约7.5亿个文档的索引,并注意到我的新索引大小已经是350GB。我做了一些数学运算,看起来索引在完全索引时会增长到5.5TB左右。那比<{1}}索引 1.5TB 。我没想到这个。相反,我期待大小的减少,因为我删除了几个属性。这是正常的事情还是我做错了什么? 1.4.4中是否有不同的默认设置可以促进这种增长?

1.4.4索引设置:

5.2.2

1.4.4索引映射:

{
  "index": {
    "refresh_interval": "30s",
    "number_of_shards": "20",
    "creation_date": "1426251049131",
    "analysis": {
      "analyzer": {
        "default": {
          "filter": [
            "icu_folding",
            "icu_normalizer"
          ],
          "type": "custom",
          "tokenizer": "icu_tokenizer"
        }
      }
    },
    "uuid": "WdgnCLyITgmpb4DROegV3Q",
    "version": {
      "created": "1040499"
    },
    "number_of_replicas": "1"
  }
}

5.2.2索引设置:

{
  "article": {
    "_source": {
      "enabled": false
    },
    "_all": {
      "enabled": false
    },
    "properties": {
      "date": {
        "format": "dateOptionalTime",
        "type": "date",
        "doc_values": true
      },
      "has_enclosures": {
        "type": "boolean"
      },
      "feed_subscribers": {
        "type": "integer",
        "doc_values": true
      },
      "feed_language": {
        "index": "not_analyzed",
        "type": "string"
      },
      "author": {
        "norms": {
          "enabled": false
        },
        "analyzer": "keyword",
        "type": "string"
      },
      "has_pictures": {
        "type": "boolean"
      },
      "title": {
        "norms": {
          "enabled": false
        },
        "type": "string"
      },
      "content": {
        "norms": {
          "enabled": false
        },
        "type": "string"
      },
      "has_video": {
        "type": "boolean"
      },
      "url": {
        "index": "not_analyzed",
        "type": "string"
      },
      "feed_canonical": {
        "type": "boolean"
      },
      "feed_id": {
        "type": "integer",
        "doc_values": true
      }
    }
  }
}

5.2.2索引映射:

{
  "articles": {
    "settings": {
      "index": {
        "refresh_interval": "-1",
        "number_of_shards": "40",
        "provided_name": "articles",
        "creation_date": "1489604158595",
        "analysis": {
          "analyzer": {
            "default": {
              "filter": [
                "icu_folding",
                "icu_normalizer"
              ],
              "type": "custom",
              "tokenizer": "icu_tokenizer"
            }
          }
        },
        "number_of_replicas": "0",
        "uuid": "LOeOcZb_TMCX6E_86uMyXQ",
        "version": {
          "created": "5020299"
        }
      }
    }
  }
}

任何帮助都将非常感谢,因为在此群集上完全重新索引大约需要30天...谢谢!

2 个答案:

答案 0 :(得分:1)

我的猜测是doc_values。 由于弹性2.0,默认情况下启用了doc_values,这意味着5.2映射会为比1.4映射更多的字段创建doc_values,这会消耗磁盘空间。

答案 1 :(得分:0)

我看到你修改了刷新间隔并将副本数量设置为0,如果使用旋转磁盘,你可以添加到elasticsearch.yml来提高索引速度:

index.merge.scheduler.max_thread_count: 1

如果您还不关心搜索,ES5群集上的以下内容也可以提供帮助:

PUT /_cluster/settings
{
    "transient" : {
        "indices.store.throttle.type" : "none" 
    }
}

确保您已禁用交换功能。在ES5群集中为您的节点分配了多少内存? (由于Elasticsearch的内存寻址限制,您应该使用节点总可用内存的一半,上限为32 GB。

此外,这种大小的增加可能是因为Elasticsearch不会经常合并其片段,并且会等待更平静的时间来合并它们,从而减小磁盘上的大小。只要重新索引没有结束,判断新索引的整体规模就有点早。

以下几篇文章可以提供帮助: