本文档旨在指导您在创建表时,如何对向量索引进行通用及高级配置,以满足不同业务场景下对性能、成本和实时性的要求。
参数配置详解
在创建表的第四步配置索引结构时,您可以对向量字段进行详细配置。

向量维度
作用:定义向量包含的特征数量。此配置必须与您使用的向量模型输出的维度严格一致。
配置建议:
保持一致:如果配置的维度与实际写入的向量数据维度不符,索引构建将失败。
性能影响:维度越高,向量表达的信息越丰富,但同时会增加内存占用和计算开销。维度翻倍,内存占用约翻倍。
距离类型
作用:定义计算向量之间相似度的方法。不同的距离类型适用于不同的数据特征和业务场景,选择合适的距离类型对召回效果至关重要。
选择指南:
距离类型
向量得分含义
余弦距离 (Cosine)
得分范围为
[-1, 1],得分越大越相似。1表示完全相同,-1表示完全相反。内积距离 (InnerProduct)
得分越大越相似。
欧式距离 (SquareEuclidean)
得分越小越相似。
0表示完全重合。
向量索引算法
作用:选择构建向量索引的底层算法。不同的算法在构建速度、内存占用、查询性能和召回率之间有不同的侧重。
选择指南:
算法名称
描述内容
距离类型
数据规模
准确性 (Recall)
查询延迟 (Latency)
内存占用 (RAM)
核心应用场景
FLAT
(原名:Linear)
向量规模:适用于万级别数据。
场景描述:数据准确性高,召回率100%
InnerProduct 、SquaredEuclidean、Cosine
极小 (<10k)
万级
100% (精确)
极慢
极低
基准测试、数据量极小的精排
HNSW
向量规模:适用于千万级别数据规模。
场景描述:性能标杆,对数据准确性与查询延迟有严格要求。
InnerProduct 、SquaredEuclidean、Cosine
中规模 (10M+)
千万级
极高
低
极高
性能要求高的在线检索 (In-memory)
HNSW_RaBitQ
向量规模:适用于十亿级别数据规模。
场景描述:适合在极致内存需求下处理海量数据,对准确性要求不苛刻的场景。
SquaredEuclidean
中/大规模(100M+)
亿级别
高
极低
极低
针对二进制量化优化的轻量化检索。
CagraHNSW
向量规模:适用于亿级别数据规模。
场景描述:GPU 性能怪兽,适合于GPU 图索引算法应用。通常配合多显卡处理亿级数据。
InnerProduct 、SquaredEuclidean
中/大规模 (100M+)
亿级别
极高
极低 (GPU)
极高
GPU 加速、极高吞吐量场景
HNSW_SQ
(原名:QGraph)
向量规模:适用于十亿级别数据规模。
场景描述:对查询耗时与查询性能要求高且对数据准确性要求不严苛。
InnerProduct 、SquaredEuclidean、Cosine
中规模 (100M+)
十亿级
高
低
高
IVF_SQ8
向量规模:适用于亿级别数据规模。
场景描述:传统平衡,对数据准确性与查询延迟要求都不高。
InnerProduct 、SquaredEuclidean、Cosine
大规模
五亿级
中/高
中
低
预算有限、海量数据的冷热分层。通过压缩向量减少内存占用。是平衡成本与规模的经典方案。
DiskANN
向量规模:规模之王,适用于十亿以上级别数据规模。
场景描述:本地盘使用,对查询延迟要求不严苛且内存占用少。
InnerProduct 、SquaredEuclidean、Cosine
海量 (Billion+)
十亿级以上
高
中/高
极低
磁盘驻留、超大规模搜索
实时索引
作用:开启后,通过API写入的增量数据可以被立即构建索引并提供查询,实现数据的秒级可见。
工作机制:系统会将实时写入的数据先构建临时的内存索引,当累积到一定规模后,再与磁盘上的全量索引进行合并。
配置建议:
开启 (
true):适用于需要数据立即可查的在线业务场景。开启后会额外占用少量内存和CPU资源。关闭 (
false):适用于离线分析或全量导入后不再频繁更新的场景。
高级配置
线性构建的阈值
作用:当一个分片内的数据量小于此阈值时,系统将强制使用
Linear(线性扫描)算法进行暴力搜索,即使您配置了其他向量索引算法。配置建议:
默认值:
5000。这是一个经验值,在此数据量下,暴力搜索的性能通常优于或接近构建复杂索引所需的时间开销。调整场景:一般情况下无需调整。如果您的查询并发极高且数据量恰好在阈值附近,可适当降低此值以强制使用
HNSW等高性能索引,但这可能会增加构建开销。
忽略有问题的向量数据
作用:控制在全量或增量数据构建过程中,遇到维度不匹配或数据为空的异常向量时的处理策略。
配置建议:
选项
行为
推荐场景
true遇到异常向量时,该行数据将被跳过,构建任务会继续执行,并在日志中记录警告。
开发测试阶段。方便快速调试,避免因少量脏数据导致整个构建任务中断。
false遇到任何异常向量时,构建任务将立即失败并报错。
生产环境。确保数据质量,避免数据在不知情的情况下被静默丢弃。建议配合完善的上游数据清洗流程使用。
实时索引参数
作用:当开启实时索引后,此参数用于微调实时数据流的处理行为。
参数示例:
{"proxima.oswg.streamer.segment_size":2048}参数解释:
proxima.oswg.streamer.segment_size控制实时数据在内存中累积到多少条后,刷写成一个小的内存段(Segment)。调优建议:
高写入QPS场景:可适当调大此值(如
4096),以减少内存中Segment的数量,降低索引的管理开销,但这会略微增加数据从写入到可查的延迟。低写入QPS场景:保持默认值
2048或适当调小,可以更快地使新写入的数据可被查询。
实时检索参数
作用:在查询时动态调整各索引算法的搜索行为,以在召回率和查询延迟之间取得平衡。此参数的Key和Value因所选的向量索引算法而异。
通用说明:通常,这类参数用于控制搜索范围。例如,对于
HNSW算法,ef参数控制了在搜索时要遍历的邻居节点数量,ef值越大,召回率越高,但查询延迟也相应增加。配置示例(HNSW):
{"searcher_name":"HNSW", "ef":200}ef的取值范围通常在k(查询返回的top K结果数)到4096之间。建议从100开始测试,根据业务对召回率和延迟的要求进行调整。
向量分隔符
作用:定义在字符串格式的向量数据中,各维度值之间的分隔符。
示例:对于向量数据
1.05,0.15,0.14,其分隔符为逗号(,),这也是系统默认值。一般无需修改。