磁盘使用调优

禁用不需要的功能

默认情况下,elasticsearch _索引并且新增数据到大多数的字段中,以便于它们能够被索引和聚合。比如,你有一个叫 _foo 的数字 field(字段),你想要一个 histograms__(直方图) 但是不需要过滤,那么就可以在 mappings(映射) 中禁用这用这个 _field(字段)_的索引。

PUT index
{
  "mappings": {
    "type": {
      "properties": {
        "foo": {
          "type": "integer",
          "index": false
        }
      }
    }
  }
}

text field(文本字段)_在索引中规范化的存储是为了对 _documents 进行评分。如果你只想要 text field(文本字段)的匹配功能,不关心生成的分数,可以在 elasticsearch中配置中成不向索引编写规范:

PUT index
{
  "mappings": {
    "type": {
      "properties": {
        "foo": {
          "type": "text",
          "norms": false
        }
      }
    }
  }
}

text field(文本字段) 默认情况下还存储了在索引的频率和位置,频率用于计算得分,而位置用于短语查询;如果不需要进行短语查询,你可以告诉 _elasticsearch _不索引位置:

PUT index
{
  "mappings": {
    "type": {
      "properties": {
        "foo": {
          "type": "text",
          "index_options": "freqs"
        }
      }
    }
  }
}

此外,如果你不关心得分,可以配置 elasticsearch  只索引匹配到的 documents  (文档)。这个字段仍然可以被搜索,但是短语查询的时候会报错并且得分将假设每个 documents  (文档)中只出现一次。

PUT index
{
  "mappings": {
    "type": {
      "properties": {
        "foo": {
          "type": "text",
          "norms": false,
          "index_options": "freqs"
        }
      }
    }
  }
}

不要使用默认的动态字符串映射

默认的 _dynamic string mappings (动态字符串映射)_将以 _text(文本)_和 _keywords(关键字)_的形式对字符串字段进行索引。如果你只需要使用它们中的一种,这么做是浪费的。通常 _id field(id 字段)_只需要被当成 _keywords(关键字)_来索引,而 _body field(字段)_只需要被当成 _text(文本) field(字段)_来索引。

禁用 dynamic string mappings (动态字符串映射)_方法有:明确 _string fields(字符串字段)_的 _mapping(映射)_或者为 _text(文本)_和 _keywords(关键字)_映射的字符串字段设置动态 _templates(模版) 。

例如,这是一个将字符串字段映射为 keywords(关键字) 的模版:

PUT index
{
  "mappings": {
    "type": {
      "dynamic_templates": [
        {
          "strings": {
            "match_mapping_type": "string",
            "mapping": {
              "type": "keyword"
            }
          }
        }
      ]
    }
  }
}

禁用 __all_

all field(字段)_ 将会索引所有字段中的所有值,这将会很大的空间。如果你不需要同时搜索所有字段,可以禁用 all field(字段)_。

使用 best_compression

source 和 存储的字段将会占用很大的存储空间。可以使用 _best_compression  codec(编解码器) 进行有效的压缩。

使用最合适的最小数字类型

您为数字数据选择的类型可能会对磁盘使用量产生重大影响。特别地,整数应该使用整数类型(byte, short, integer or long)(字节,短整数或长整数)存储,并且浮点应该被存储在 scaling_float 中,如果合适的话也可以存储在符合用例的最小类型中:使用 float over double 或 浮点数的 half_float 将有助于节省存储空间。