内存优化搜索
于 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 索引文件的流。这种最小程度的预热会带来
- 更快的初始搜索。
- 降低内存开销。
- 更高效的资源利用。
对于禁用内存优化搜索的字段,预热过程会将向量加载到堆外内存中。