ScaNN 索引参考

选择文档版本:

本页面提供了 ScaNN 索引的参考资料。

调节参数

以下索引参数和数据库标志可结合使用,以便在召回率和 QPS 之间取得适当的平衡。

调优参数 说明 选项类型
max_num_levels K-means 聚类树的形心级别数量上限。
  • 二级树索引:默认情况下,对于二级树(1 个形心级别 + 底层叶级别)设置为 1
  • 三层树索引:默认情况下,对于三级树(2 个形心级别 + 底层叶级别)设置为 2
  • 如果向量行数超过 1 亿行,请将该值设置为 2
  • 如果向量行数少于 1,000 万行,请将该值设为 1
  • 如果向量行数介于 1,000 万行和 1 亿行之间,请设置为 12,以便针对索引构建时间进行优化(设置为 2)或针对搜索召回率进行优化(设置为 1)。
索引创建
(可选)
num_leaves 要应用于此索引的分区数量。创建索引时所应用的分区数量会影响索引性能。通过为一定数量的向量增加分区,您可以创建更精细的索引,从而提高召回率和查询性能。不过,这会以延长索引创建时间为代价。

由于三级树的构建速度比二级树更快,因此您可以在创建三级树索引时增加 num_leaves_value,以实现更好的性能。
  • 二级索引:将此值设置为 11048576 之间的任意值。

    对于需在快速索引构建和良好搜索性能之间实现平衡的索引,请在开始时使用 sqrt(ROWS),其中 ROWS 是向量行数。每个分区包含的向量数量通过
    ROWS/sqrt(ROWS) = sqrt(ROWS) 进行计算。

    由于可以对向量行数少于 1,000 万的数据集创建二级树索引,因此每个分区会包含少于 (sqrt(10M)) 个向量(即 3200 个向量)。为获得最佳向量搜索质量,建议尽可能减少每个分区中的向量数量。建议的分区大小约为每个分区 100 个向量,因此请将 num_leaves 设置为 ROWS/100。如果您有 1,000 万个向量,则应将 num_leaves 设置为 100,000。
  • 三级索引:将此值设置为 11048576 之间的任意值。

    如果您不确定要选择的确切值,请在开始时使用 power(ROWS, 2/3),其中 ROWS 是向量行数。每个分区包含的向量数量通过
    ROWS/power(ROWS, 2/3) = power(ROWS, 1/3) 进行计算。

    由于可以对向量行数超过 1 亿的数据集创建三级树索引,因此每个分区会包含超过
    (power(100M, 1/3)) 个向量(即 465 个向量)。为获得最佳向量搜索质量,建议尽可能减少每个分区中的向量数量。建议的分区大小约为每个分区 100 个向量,因此请将 num_leaves 设置为 ROWS/100。如果您有 1 亿个向量,则应将 num_leaves 设置为 100 万。
索引创建
(必需)
quantizer 您要用于 K-means 树的量化器的类型。默认值设置为 SQ8,这可在召回率损失最小(通常低于 1-2%)的情况下提供更好的查询性能。

如果需要 99% 或更高的召回率,请将其设置为 FLAT
索引创建
(可选)
scann.enable_inline_filtering 支持内嵌过滤,可直接在向量相似性搜索操作中查询数据并应用过滤条件。这些向量相似度查询会使用同一数据库表中的过滤条件,并在计算最近邻项识别距离时完成过滤条件评估。此选项默认处于停用状态。

如需启用内嵌过滤,请将此参数设置为 true。如果您发现性能下降,请将其设置为 false

此选项为预览版
查询运行时
(可选)
scann.enable_pca 启用主成分分析 (PCA),这是一种降维技术,用于尽可能自动缩减嵌入的大小。此选项默认处于启用状态。

如果您发现召回率下降,请将其设置为 false
索引创建
(可选)
scann.num_leaves_to_search 此数据库标志控制要搜索的叶或分区的绝对数量,可让您在召回率和 QPS 之间进行权衡。默认值为 num_leaves 中设置的值的 1%。

值越高,召回率越高,但 QPS 越低。同样,值越低,召回率越低,但 QPS 越高。
查询运行时
(可选)
scann.pre_reordering_num_neighbors 在进行设置后,该数据库标志会指定在初始搜索确定一组候选项后,在重新排序阶段要考虑的候选近邻项的数量。请将此参数设置为一个大于您希望查询返回的近邻项数量的值。

值越高,召回率越高,但 QPS 越低。将此值设置为 0 可停用重新排序。如果在创建索引期间未启用 PCA,则默认值为 0。否则,默认值为 50 x K,其中 K 是查询中指定的 LIMIT。
查询运行时
(可选)
scann.num_search_threads 用于多线程搜索的搜索程序线程数。这可以在延迟时间敏感型应用中使用多个线程进行 ScaNN ANN 搜索,从而帮助缩短单个查询的延迟时间。如果数据库已受限于 CPU,此设置不会缩短单个查询的延迟时间。默认值为 2 查询运行时
(可选)

后续步骤