| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 | [[tune-for-disk-usage]]== Tune for disk usage[float]=== Disable the features you do not needBy default elasticsearch indexes and adds doc values to most fields so that theycan be searched and aggregated out of the box. For instance if you have a numericfield called `foo` that you need to run histograms on but that you never need tofilter on, you can safely disable indexing on this field in your<<mappings,mappings>>:[source,js]--------------------------------------------------PUT index{  "mappings": {    "type": {      "properties": {        "foo": {          "type": "integer",          "index": false        }      }    }  }}--------------------------------------------------// CONSOLE<<text,`text`>> fields store normalization factors in the index in order to beable to score documents. If you only need matching capabilities on a `text`field but do not care about the produced scores, you can configure elasticsearchto not write norms to the index:[source,js]--------------------------------------------------PUT index{  "mappings": {    "type": {      "properties": {        "foo": {          "type": "text",          "norms": false        }      }    }  }}--------------------------------------------------// CONSOLE<<text,`text`>> fields also store frequencies and positions in the index bydefault. Frequencies are used to compute scores and positions are used to runphrase queries. If you do not need to run phrase queries, you can tellelasticsearch to not index positions:[source,js]--------------------------------------------------PUT index{  "mappings": {    "type": {      "properties": {        "foo": {          "type": "text",          "index_options": "freqs"        }      }    }  }}--------------------------------------------------// CONSOLEFurthermore if you do not care about scoring either, you can configureelasticsearch to just index matching documents for every term. You willstill be able to search on this field, but phrase queries will raise errorsand scoring will assume that terms appear only once in every document.[source,js]--------------------------------------------------PUT index{  "mappings": {    "type": {      "properties": {        "foo": {          "type": "text",          "norms": false,          "index_options": "freqs"        }      }    }  }}--------------------------------------------------// CONSOLE[float]=== Don't use default dynamic string mappingsThe default <<dynamic-mapping,dynamic string mappings>> will index string fieldsboth as <<text,`text`>> and <<keyword,`keyword`>>. This is wasteful if you onlyneed one of them. Typically an `id` field will only need to be indexed as a`keyword` while a `body` field will only need to be indexed as a `text` field.This can be disabled by either configuring explicit mappings on string fieldsor setting up dynamic templates that will map string fields as either `text`or `keyword`.For instance, here is a template that can be used in order to only map stringfields as `keyword`:[source,js]--------------------------------------------------PUT index{  "mappings": {    "type": {      "dynamic_templates": [        {          "strings": {            "match_mapping_type": "string",            "mapping": {              "type": "keyword"            }          }        }      ]    }  }}--------------------------------------------------// CONSOLE[float]=== Disable `_all`The <<mapping-all-field,`_all`>> field indexes the value of all fields of adocument and can use significant space. If you never need to search against allfields at the same time, it can be disabled.[float]=== Use `best_compression`The `_source` and stored fields can easily take a non negligible amount of diskspace. They can be compressed more aggressively by using the `best_compression`<<index-codec,codec>>.[float]=== Use the smallest numeric type that is sufficientThe type that you pick for <<number,numeric data>> can have a significant impacton disk usage. In particular, integers should be stored using an integer type(`byte`, `short`, `integer` or `long`) and floating points should either bestored in a `scaled_float` if appropriate or in the smallest type that fits theuse-case: using `float` over `double`, or `half_float` over `float` will helpsave storage.
 |