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

编辑

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

这是一个专家设置,其详细信息将来可能会发生变化。

默认情况下,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",
    body={"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
PUT /my-index-000001
{
  "settings": {
    "index.store.preload": ["nvd", "dvd"]
  }
}

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

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

对于向量搜索,如果您使用近似 k 近邻搜索,则可能需要将设置设置为向量搜索文件:["vec", "vex", "vem"](“vec”用于向量值,“vex” - 用于 HNSW 图,“vem” - 用于元数据)。

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