全部产品
Search
文档中心

智能开放搜索 OpenSearch:向量索引通用配置

更新时间:Feb 24, 2026

本文档旨在指导您在创建表时,如何对向量索引进行通用及高级配置,以满足不同业务场景下对性能、成本和实时性的要求。

参数配置详解

在创建表的第四步配置索引结构时,您可以对向量字段进行详细配置。

image

向量维度

  • 作用:定义向量包含的特征数量。此配置必须与您使用的向量模型输出的维度严格一致。

  • 配置建议:

    • 保持一致:如果配置的维度与实际写入的向量数据维度不符,索引构建将失败。

    • 性能影响:维度越高,向量表达的信息越丰富,但同时会增加内存占用和计算开销。维度翻倍,内存占用约翻倍。

距离类型

  • 作用:定义计算向量之间相似度的方法。不同的距离类型适用于不同的数据特征和业务场景,选择合适的距离类型对召回效果至关重要。

  • 选择指南:

    距离类型

    向量得分含义

    余弦距离 (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,其分隔符为逗号(,),这也是系统默认值。一般无需修改。