ScaNN 索引创建
如需了解详情,请参阅 ScaNN 索引参考文档。
二级树索引
如需应用建议以帮助您为数据集找到 num_leaves
和 num_leaves_to_search
的最佳值,请按照以下建议的步骤操作:
- 如需创建针对以下情况优化的
ScaNN
索引,请将num_leaves
参数设置为以下的相应值,其中 rows 是已编入索引的表中的行数:- 实现平衡的索引构建时间和质量:将
num_leaves
设置为sqrt(rows)
。 - 高质量:将 num_leaves 设置为 rows/100。
- 实现平衡的索引构建时间和质量:将
- 运行测试查询,并增加
scann.num_of_leaves_to_search
的值,直到达到目标召回率范围(例如 95%)为止。如需详细了解如何分析查询,请参阅分析查询。 - 记下
scann.num_leaves_to_search
与num_leaves
之间的比率,此比率将在后续步骤中使用。此比率可提供关于数据集的近似值,有助于您实现目标召回率。
如果您使用的是高维向量(500 个维度或更高),并且想要提高召回率,请尝试对scann.pre_reordering_num_neighbors
的值进行调优。默认值设置为值500 * K
,其中K
是您在查询中设置的限制。 - 如果您的查询达到目标召回率后 QPS 过低,请按照以下步骤操作:
- 重新创建索引,并根据以下指导增加
num_leaves
和scann.num_leaves_to_search
的值:- 将
num_leaves
设置为行数平方根的更大倍数。例如,如果索引的num_leaves
设置为行数的平方根,请尝试将其设置为平方根的两倍。如果该值已是两倍,请尝试将其设置为平方根的三倍。 - 根据需要增加
scann.num_leaves_to_search
,以使其与num_leaves
保持您在第 3 步中记录的比率。 - 将
num_leaves
设置为小于或等于行数除以 100 的值。
- 将
- 再次运行测试查询。在运行测试查询时,尝试减少
scann.num_leaves_to_search
,找到一个可以增加 QPS,同时保持较高召回率的值。在不重建索引的情况下尝试使用不同的scann.num_leaves_to_search
值。
- 重新创建索引,并根据以下指导增加
- 重复第 4 步,直到 QPS 和召回率范围都达到可接受的值。
三级树索引
除了针对二级树 ScaNN
索引的建议之外,还请遵循以下指导。
如需应用建议以查找 num_leaves
和 max_num_levels
索引参数的最佳值,请按照以下步骤操作:
根据您的性能目标,使用以下
num_leaves
和max_num_levels
组合创建ScaNN
索引:- 平衡索引构建时间和质量:将
max_num_levels
设置为2
,将num_leaves
设置为power(rows, ⅔)
。 - 优化质量:将
max_num_levels
设置为2
,将num_leaves
设置为rows/100
。
- 平衡索引构建时间和质量:将
运行测试查询。如需详细了解如何分析查询,请参阅分析查询。
记下
scann.num_leaves_to_search
与num_leaves
之间的比率,此比率将在后续步骤中使用。此比率可提供关于数据集的近似值,有助于您实现目标召回率。
如果您使用的是高维向量(500 个维度或更高),并且想要提高召回率,请尝试对 scann.pre_reordering_num_neighbors
的值进行调优。默认值设置为值 500 * K
,其中 K
是您在查询中设置的限制。
如果您的查询达到目标召回率后 QPS 过低,请按照以下步骤操作:
- 重新创建索引,并根据以下指导增加
num_leaves
和scann.num_leaves_to_search
的值: - 将
num_leaves
设置为power(rows, ⅔)
的更大倍数。例如,如果索引的num_leaves
设置为power(rows, ⅔)
,请尝试将其设置为power(rows, ⅔)
的两倍。如果该值已经是两倍,请尝试将其设置为power(rows, ⅔)
的三倍。 - 根据需要增加
scann.num_leaves_to_search
,以使其与num_leaves
保持您在第 3 步中记录的比率。 - 将
num_leaves
设置为小于或等于rows/100
的值。 - 再次运行测试查询。在运行测试查询时,尝试减少
scann.num_leaves_to_search
,找到一个可以增加 QPS,同时保持较高召回率的值。在不重建索引的情况下尝试使用不同的scann.num_leaves_to_search
值。
- 重新创建索引,并根据以下指导增加
重复第 4 步,直到 QPS 和召回率范围都达到可接受的值。
索引维护
如果您的表容易频繁更新或插入,我们建议您定期重新编制现有的 ScaNN
索引,以提高召回率准确率。您可以监控索引指标,以查看自构建索引以来向量分布或向量变更的变化,然后相应地重新编制索引。如需详细了解指标,请参阅向量索引指标。