ES中的空间使用

  |   0 评论   |   2,640 浏览

背景

ES的磁盘占用是比较高的,因为做了一系列的查询优化

空间使用

  1. 显示原始信息,有"_source": {"enabled": true}
  2. 建立索引,有"index": "not_analyzed"
  3. 索引使用了doc_value,有"doc_values": true
  4. _all字段:把所有其它字段中的值,以空格为分隔符组成一个大字符串,然后被分析和索引,但是不存储,即能被查询,但不能被取回显示

经过这些默认的查询优化,会造成存储空间的冗余。

优化方案

去掉或者压缩_source

去掉_source

官方文档, 中文文档, 中文文档对照版

关闭_source

{
    "yourtype":{
        "_source":{
            "enabled":false
        },
        "properties": {
            ... 
        }
    }
}

存储指定字段到_source

{
    "yourtype":{
        "_source":{
            "includes":["field1","field2"]
        },
        "properties": {
            ... 
        }
    }
}
{
    "yourtype":{
        "_source":{
            "excludes":["field1","field2"]
        },
        "properties": {
            ... 
        }
    }
}

压缩_source

index.codec:best_compression,
compress:true

去掉索引

启用索引

{
   "test": {
      "_source": {
         "enabled": false
      },
      "properties": {
         "title": {
            "type": "string",
            "index": "not_analyzed",
            "store": "true"
         },
         "content": {
            "type": "string"
         }
      }
   }
}

禁用索引

默认store即为false,为禁用索引状态.

去掉doc_value

禁用_all字段

细节见官方文档,以及中文文档.

方法一,完全禁用:

在模板中设置

{
  "mappings": {
    "type_1": { 
      "properties": {...}
    },
    "type_2": { 
      "_all": {
        "enabled": false
      },
      "properties": {...}
    }
  }
}
  • type_1中的_all字段是enabled
  • type_2中的_all字段是disabled

方法二,排除无用字段

PUT my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "title": { 
          "type": "string"
        }
        "content": { 
          "type": "string"
        },
        "date": { 
          "type": "date",
          "include_in_all": false
        },
        "memo": {
          "type": "string",
          "index": "no",
          "store": true
      }
    }
  }
}

也适用于nested字段

{
  "mappings": {
    "my_type": {
      "include_in_all": false, 
      "properties": {
        "title":          { "type": "string" },
        "author": {
          "include_in_all": true, 
          "properties": {
            "first_name": { "type": "string" },
            "last_name":  { "type": "string" }
          }
        },
        "editor": {
          "properties": {
            "first_name": { "type": "string" }, 
            "last_name":  { "type": "string", "include_in_all": true } 
          }
        }
      }
    }
  }
}

进一步阅读

评论

发表评论

validate