具有相同数据和文档数量的弹性搜索索引大小的差异

Difference in elasticsearch index size with same data and number of documents

我有多个 elasticsearch 集群,每个集群都有相同的索引、相同的数据和相同数量的文档。但索引大小存在显着差异。 我尝试使用 merge api 但它没有帮助。问题是,因为这个 elasticsearch 最终是 运行 out of space:

{
    "state": "UNASSIGNED",
    "primary": true,
    "node": null,
    "relocating_node": null,
    "shard": 3,
    "index": "local-deals-1624295772015",
    "recovery_source":
    {
        "type": "EXISTING_STORE"
    },
    "unassigned_info":
    {
        "reason": "ALLOCATION_FAILED",
        "at": "2021-08-18T19:14:20.472Z",
        "failed_attempts": 20,
        "delayed": false,
        "details": "shard failure, reason [lucene commit failed], failure IOException[No space left on device]",
        "allocation_status": "deciders_no"
    }
}

我已将 elasticsearch 集群配置为每个节点不超过 2 个分片以提高查询性能。

群集 1:

集群 2:

鉴于这两个具有相同文档的集群,索引大小存在 90% 的差异,这对我来说没有意义。有人可以解释这种行为吗?

我的快速解决方法是增加 EBS 容量。

回复@Val的问题: 有多个文档被标记为删除。

"5": {
    "health": "yellow",
    "status": "open",
    "index": "local-deals-1624295772015",
    "uuid": "s7QDLtuhRN6HM_VwtVTB0Q",
    "pri": "6",
    "rep": "1",
    "docs.count": "8911560",
    "docs.deleted": "18826270",
    "store.size": "37gb",
    "pri.store.size": "19.9gb"
}

你可以尝试 运行 _forcemerge 确实。它不是阻塞调用,它会触发一个异步任务,该任务将 运行 在后台运行,直到作业完成。 您无需等待调用 return 即可强制合并段。

还知道这不会删除所有已删除的文档,但会删除大量文档,具体取决于比率 deleted/docs。

您可以在 MergePolicyConfig.java class.

中找到有关不同合并设置的更多信息