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

编辑

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

编辑

这是一个专家设置,其细节在未来可能会发生变化。

默认情况下,Elasticsearch 完全依赖操作系统文件系统缓存来缓存 I/O 操作。可以设置 index.store.preload,以便在打开时告知操作系统将热索引文件的内容加载到内存中。此设置接受以逗号分隔的文件扩展名列表:列表中扩展名对应的所有文件都将在打开时预加载。这对于提高索引的搜索性能非常有用,尤其是在主机操作系统重启时,因为这会导致文件系统缓存被清空。但是请注意,这可能会减慢索引的打开速度,因为只有在数据加载到物理内存后,它们才能可用。

此设置仅尽力而为,并且可能根本无法工作,具体取决于存储类型和主机操作系统。

index.store.preload 是一个静态设置,可以在 config/elasticsearch.yml 中设置

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

或在创建索引时在索引设置中设置

resp = client.indices.create(
    index="my-index-000001",
    settings={
        "index.store.preload": [
            "nvd",
            "dvd"
        ]
    },
)
print(resp)
response = client.indices.create(
  index: 'my-index-000001',
  body: {
    settings: {
      'index.store.preload' => [
        'nvd',
        'dvd'
      ]
    }
  }
)
puts response
const response = await client.indices.create({
  index: "my-index-000001",
  settings: {
    "index.store.preload": ["nvd", "dvd"],
  },
});
console.log(response);
PUT /my-index-000001
{
  "settings": {
    "index.store.preload": ["nvd", "dvd"]
  }
}

默认值为空数组,这意味着不会急切地将任何内容加载到文件系统缓存中。对于经常搜索的索引,您可能希望将其设置为 ["nvd", "dvd"],这将导致规范和文档值被急切地加载到物理内存中。这是首先要查看的两个扩展名,因为 Elasticsearch 对它们执行随机访问。

可以使用通配符来指示应预加载所有文件:index.store.preload: ["*"]。但请注意,通常加载所有文件到内存中没有用,特别是那些用于存储字段和词向量的文件,因此更好的选择可能是将其设置为 ["nvd", "dvd", "tim", "doc", "dim"],这将预加载规范、文档值、词典、倒排列表和点数据,这些是索引中用于搜索和聚合的最重要部分。

对于向量搜索,如果您使用近似 k 近邻搜索,您可能希望将此设置设置为向量搜索文件。有关文件详细列表,请参阅向量预加载

请注意,对于大于主机主内存大小的索引,此设置可能很危险,因为它会导致在大型合并后重新打开时文件系统缓存被清空,从而使索引和搜索变得更慢