ScaNN
索引的建议参数因您选择构建二级树索引还是三级树索引而异。本页提供了有关如何调整索引参数以在召回率和 QPS 之间取得最佳平衡的建议。
ScaNN 索引创建
如需了解详情,请参阅 ScaNN 索引参考文档。
两级树索引
如需应用建议来帮助您为数据集找到 num_leaves
和 num_leaves_to_search
的最佳值,请按照以下建议步骤操作:
- 如需创建针对以下情况进行了优化的
ScaNN
索引,请将num_leaves
参数设置为以下值,其中 rows 是编入索引的表中的行数:- 平衡索引构建时间和质量:将
num_leaves
设置为sqrt(rows)
。 - quality 将 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
,使其与您在第 3 步中记录的num_leaves
保持相同的比例。 - 将
num_leaves
设置为小于或等于rows/100
的值。 - 再次运行测试查询。在运行测试查询时,尝试降低
scann.num_leaves_to_search
,找到一个值,使其能够提高 QPS 并保持较高的召回率。尝试使用不同的scann.num_leaves_to_search
值,而无需重新构建索引。
- 重新创建索引,并根据以下指南提高
重复第 4 步,直到 QPS 和召回率范围均达到可接受的值。
索引维护
如果您的表容易频繁更新或插入,我们建议您定期重新编制现有 ScaNN
索引,以提高召回准确性。
您可以监控索引指标,查看自索引构建以来向量分布或向量更改的变化,然后相应地重新编制索引。如需详细了解指标,请参阅查看矢量索引指标。