Link Search Menu Expand Document Documentation Menu

内存优化搜索

于 3.1 版本引入

内存优化搜索允许 Faiss 引擎高效运行,而无需将整个向量索引加载到堆外内存中。如果没有此优化,Faiss 通常会将整个索引加载到内存中,如果索引大小超过可用物理内存,这可能会变得不可持续。通过内存优化搜索,引擎会对索引文件进行内存映射,并依赖操作系统的文件缓存来处理搜索请求。这种方法避免了不必要的 I/O,并允许重复读取直接从系统缓存中提供。

内存优化搜索仅影响搜索操作。索引行为保持不变。

限制

OpenSearch 中内存优化搜索存在以下限制

如果您使用 IVF 或 PQ,无论是否启用内存优化模式,引擎都会将数据加载到内存中。

配置

要启用内存优化搜索,请在创建索引时将 index.knn.memory_optimized_search 设置为 true

PUT /test_index
{
  "settings": {
    "index.knn": true,
    "index.knn.memory_optimized_search": true
  },
  "mappings": {
    "properties": {
      "vector_field": {
        "type": "knn_vector",
        "dimension": 128,
        "method": {
          "name": "hnsw",
          "engine": "faiss"
        }
      }
    }
  }
}

要在现有索引上启用内存优化搜索,您必须关闭索引,更新设置,然后重新打开索引

POST /test_index/_close

PUT /test_index/_settings
{
  "index.knn.memory_optimized_search": true
}

POST /test_index/_open

当您将字段配置为 on_disk 模式和 1x 压缩时,即使在索引级别未启用内存优化,该字段也会自动启用内存优化搜索。有关更多信息,请参阅内存优化向量

内存优化搜索与基于磁盘的搜索不同,因为它不使用压缩或量化。它只改变搜索期间向量数据的加载和访问方式。

性能优化

启用内存优化搜索后,预热 API 只加载搜索操作所需的基本信息,例如打开底层 Faiss 索引文件的流。这种最小程度的预热会带来

  • 更快的初始搜索。
  • 降低内存开销。
  • 更高效的资源利用。

对于禁用内存优化搜索的字段,预热过程会将向量加载到堆外内存中。

后续步骤

剩余 350 字符

有问题?

想要贡献?