ES 中的空间使用

本贴最后更新于 2655 天前,其中的信息可能已经事过境迁

背景

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 } 
          }
        }
      }
    }
  }
}

进一步阅读

  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 212 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...