Link Search Menu Expand Document Documentation Menu

向量搜索设置

OpenSearch 支持以下向量搜索设置。要了解有关静态和动态设置的更多信息,请参阅配置 OpenSearch

集群设置

下表列出了所有可用的集群级向量搜索设置。有关集群设置的更多信息,请参阅配置 OpenSearch使用 API 更新集群设置

设置 静态/动态 默认值 描述
knn.algo_param.index_thread_qty 动态 1 用于原生库和 Lucene 库(OpenSearch 2.19 及更高版本)索引创建的线程数。将此值保持较低可以减少 k-NN 插件的 CPU 影响,但也会降低索引性能。
knn.cache.item.expiry.enabled 动态 false 是否从内存中移除在指定时间内未被访问的原生库索引。
knn.cache.item.expiry.minutes 动态 3h 如果启用,则表示原生库索引从内存中移除之前的空闲时间量。
knn.circuit_breaker.unset.percentage 动态 75 断路器的原生内存使用阈值。内存使用量必须低于 knn.memory.circuit_breaker.limit 的此百分比,以便 knn.circuit_breaker.triggered 保持为 false
knn.circuit_breaker.triggered 动态 false 当内存使用量超过 knn.circuit_breaker.unset.percentage 值时为 true
knn.memory.circuit_breaker.limit 动态 50% 原生库索引的原生内存限制。在默认值下,如果一台机器有 100 GB 内存,JVM 使用 32 GB,则 k-NN 插件使用剩余 68 GB 的 50%(34 GB)。如果内存使用量超过此值,则插件将移除最近最少使用的原生库索引。

要在节点级别配置此限制,请在 opensearch.yml 中添加 node.attr.knn_cb_tier: "<tier-name>",并在集群设置中设置 knn.memory.circuit_breaker.limit.<tier-name>。例如,将节点层定义为 node.attr.knn_cb_tier: "integ",并设置 knn.memory.circuit_breaker.limit.integ: "80%"。如果已配置,节点将使用其层的断路器限制,如果未设置节点特定值,则默认为集群范围设置。
knn.memory.circuit_breaker.enabled 动态 true 是否启用 k-NN 内存断路器。
knn.model.index.number_of_shards 动态 1 用于模型系统索引的分片数量,该索引是存储用于近似最近邻 (ANN) 搜索模型的 OpenSearch 索引。
knn.model.index.number_of_replicas 动态 1 用于模型系统索引的副本分片数量。通常,在多节点集群中,此值应至少为 1 以提高稳定性。
knn.model.cache.size.limit 动态 10% 模型缓存限制不能超过 JVM 堆的 25%。
knn.faiss.avx2.disabled 静态 false 一个静态设置,指定是否禁用基于 SIMD 的 libopensearchknn_faiss_avx2.so 库,并在 x64 架构的机器上为 Faiss 引擎加载未优化的 libopensearchknn_faiss.so 库。有关更多信息,请参阅单指令多数据 (SIMD) 优化
knn.faiss.avx512_spr.disabled 静态 false 一个静态设置,指定是否禁用基于 SIMD 的 libopensearchknn_faiss_avx512_spr.so 库,并在 x64 架构的机器上为 Faiss 引擎加载 libopensearchknn_faiss_avx512.solibopensearchknn_faiss_avx2.so 或未优化的 libopensearchknn_faiss.so 库。有关更多信息,请参阅Faiss 引擎的 SIMD 优化

索引设置

下表列出了所有可用的索引级 k-NN 设置。有关更新这些设置的信息,请参阅索引级索引设置

设置中定义的几个参数目前处于弃用过程中。这些参数应在映射中设置,而不是在索引设置中设置。在映射中设置的参数将覆盖在索引设置中设置的参数。在映射中设置参数允许索引具有多个具有不同参数的 knn_vector 字段。

设置 静态/动态 默认值 描述  
index.knn 静态 false 索引是否应为 knn_vector 字段构建原生库索引。如果设置为 false,则 knn_vector 字段将存储在文档值中,但近似 k-NN 搜索功能将被禁用。  
index.knn.algo_param.ef_search 动态 100 ef(或 efSearch)表示搜索期间用于最近邻的动态列表的大小。更高的 ef 值会导致更准确但更慢的搜索。ef 不能设置为低于查询最近邻数 k 的值。ef 可以取 k 和数据集大小之间的任何值。  
index.knn.advanced.approximate_threshold 动态 0 一个段必须拥有的向量数量,然后才能为 ANN 搜索创建专门的数据结构。设置为 -1 以禁用构建向量数据结构,设置为 0 则始终构建它们。  
index.knn.advanced.filtered_exact_search_threshold 动态 过滤 ID 阈值,用于在过滤 ANN 搜索期间切换到精确搜索。如果段中过滤 ID 的数量低于此设置的值,则将对过滤 ID 执行精确搜索。  
index.knn.derived_source.enabled 静态 true 防止向量存储在 _source 中,从而减少向量索引的磁盘使用。  
  index.knn.memory_optimized_search 动态 false 在索引上启用内存优化搜索。

在 OpenSearch 2.11 或更早版本中创建的索引仍将使用之前的 ef_constructionef_search 值 (512)。

远程索引构建设置

以下设置控制远程向量索引构建

集群设置

以下远程索引构建设置适用于集群级别。

设置 静态/动态 默认值 描述
knn.remote_index_build.enabled 动态 false 为集群启用远程向量索引构建。
knn.remote_index_build.repository 动态 远程索引构建器应写入的存储库。
knn.remote_index_build.service.endpoint 动态 远程构建服务的端点 URL。

高级集群设置

以下是高级集群设置。这些设置的默认值是通过广泛的基准测试配置的。

设置 静态/动态 默认值 描述
knn.remote_index_build.poll.interval 动态 5s 客户端应多久轮询一次远程构建服务以获取作业状态。
knn.remote_index_build.client.timeout 动态 60m 等待远程构建完成的最大时间,超过此时间将回退到基于 CPU 的构建。
knn.remote_index_build.size.max 动态 0 远程索引构建服务的最大段大小,基于服务实现约束。必须大于 0

索引设置

以下远程索引构建设置适用于索引级别。

设置 静态/动态 默认值 描述
index.knn.remote_index_build.enabled 动态 false 为索引启用远程索引构建。

高级索引设置

以下索引设置为高级设置,其默认值是经过广泛基准测试后设定的。

设置 静态/动态 默认值 描述
index.knn.remote_index_build.size.min 动态 50mb 启用远程向量构建所需的最小大小。

远程构建认证

远程构建服务的用户名和密码是安全设置,必须按如下方式在 OpenSearch 密钥库中设置。

./bin/opensearch-keystore add knn.remote_index_build.service.username
./bin/opensearch-keystore add knn.remote_index_build.service.password

您可以通过使用 节点重新加载安全设置 API,无需重启节点即可重新加载安全设置。

剩余 350 字符

有问题?

想贡献吗?