# 预加载数据到文件系统缓存

原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.3/_pre_loading_data_into_the_file_system_cache.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/_pre_loading_data_into_the_file_system_cache.html)

译文链接 : [预加载数据到文件系统缓存](/pages/viewpage.action?pageId=10028674)

贡献者 : @苏涛，[ApacheCN](/display/~apachecn)，[Apache中文网](/display/~apachechina)

警告

这是为专业人员使用的设置，将来可能会被删除

默认情况下，Elasticsearch搜索完全依赖于操作系统文件系统缓存来缓存I / O操作。可以设置_**index.store.preload**_，以便通知操作系统启动时将索引文件的内容预加载到内存中。此设置接受以逗号分隔的文件扩展名列表：扩展名在列表中的所有文件将在打开时预先加载。这可以有助于提高索引的搜索性能，特别是当主机操作系统重新启动时，因为这会导致文件系统缓存被删除。但是请注意，这可能会减慢索引的打开，因为它们只有在数据加载到物理内存之后才可用。

此设置量力而为，而且可能无法在所有的文件系统和主机操作系统上运行。

_**index.store.preload**_是一个静态设置，可以在config/elasticsearch.yml中设置：

```
index.store.preload: ["nvd", "dvd"]
```

或者在创建索引时设置：

```
PUT /my_index
{
  "settings": {
    "index.store.preload": ["nvd", "dvd"]
  }
}
```

默认值为空数组，这意味着任何东西都不会被加载到文件系统缓存中。对于主动搜索的索引，您可能需要将其设置为_**[“nvd”，“dvd”]**_，这将导致norms 和doc values被加载到物理内存中。

可以使用通配符来表示所有文件都应该预加载：_**index.store.preload：[“*”]**_。但是请注意，将所有文件加载到内存中，特别是stored fields 和 term vectors的文件通常是没有用的，因此更好的选择是尽可能将其设置为_**[“nvd”，“dvd”，“tim”，“doc” “，”dim“]**_，它将预先加载norms, doc values, terms dictionaries, postings lists 和 points，这是搜索和聚合索引中最重要的部分。

请注意，对于大于主机主内存大小的索引，此设置可能是危险的，因为这会导致文件缓存系统在缓存大容量后被重新打开从而丢弃之前的缓存，从而使索引和搜索速度更慢。