1. 磁盘使用调优
原文链接 : https://www.elastic.co/guide/en/elasticsearch/reference/5.3/tune-for-disk-usage.html
译文链接 : 磁盘使用调优
1.1. 禁用不需要的功能
默认情况下,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"
}
}
}
}
}
1.2. 不要使用默认的动态字符串映射
默认的 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"
}
}
}
]
}
}
}
1.3. 禁用 _all
all field(字段)_ 将会索引所有字段中的所有值,这将会很大的空间。如果你不需要同时搜索所有字段,可以禁用 all field(字段)_。
1.4. 使用 best_compression
source 和 存储的字段将会占用很大的存储空间。可以使用 _best_compression codec(编解码器) 进行有效的压缩。
1.5. 使用最合适的最小数字类型
您为数字数据选择的类型可能会对磁盘使用量产生重大影响。特别地,整数应该使用整数类型(byte, short, integer or long)(字节,短整数或长整数)存储,并且浮点应该被存储在 scaling_float 中,如果合适的话也可以存储在符合用例的最小类型中:使用 float over double 或 浮点数的 half_float 将有助于节省存储空间。