ByteHouse 向量检索功能支持对文本、图片、视频等非结构化数据的向量特征进行存储和高效的相似度检索,可应用于以图搜图、以图搜视频、文本检索、文本搜图等场景,也可以与大模型结合构建智能化应用。本文介绍了如何启用向量检索功能并配置相关参数。
向量检索服务启用后无法关闭,请谨慎操作。
创建集群时,可同步开启向量检索功能。可在高级特性模块,启用向量检索功能。具体收费情况请参考收费说明。
为更好的向量检索性能,建议您根据修改配置参数的操作指引配置相关的用户参数和集群参数。同时,ByteHouse 也提供了向量检索最佳实践,您可按需配置。
支持配置的全量参数如下:
参数 | 说明 | 配置方式 | 默认值 | 使用建议 |
---|---|---|---|---|
| 是否使用新的 ANN 执行路径。 | 在 users.xml 中设置。 | 0 | 设置为 1 开启。 |
| 基于 HNSW index 进行 search 时,使用的搜索参数,值越大,准确度越高。 | 在 users.xml 中设置。 | 10 | Recall 90 以上场景,一般需要设置到 128 以上。 |
| 使用 Faiss IVF 索引(IVF_FLAT、IVF_PQ、IVF_PQ_FS 索引)的搜索参数,表示搜索使用的聚类中心数量。理论上,nprobe 越大,准确度越大,延迟越高。 | 在 users.xml 中设置。 | 0 (默认为 0 表示未进行设置,index 中默认使用参数为 1) | Recall 90 以上场景,考虑设置到 nlist 的 1/4 以上。 |
| 使用 Faiss 包含 refine 的索引(IVF_PQ_FS 索引)时的搜索参数,k_factor_rf 越大,用于排序的结果越多,准确度越高,延迟越高。 | 在 users.xml 中设置。 | 0 (同上) | 使用了 refine 的索引,在 recall 较低情况,可以尝试调大,可以先尝试设置为 100,视情况进行微调。 |
| 每个 part build threads 数量。 | 在 users.xml 中设置。 | 8 | 单个 part 的 build threads 控制,如果并发导入或者合并并发度较高,建议调小。 |
| 是否在 server start up 或者 part 创建以后,直接将 index load 到 cache 中。 | 在 users.xml 中设置。 | 0 | 写入加速。写入后的 part 的向量索引直接进入缓存,消除索引加载时间。 |
| 禁用处理器配置文件日志,减少日志写入开销,提升查询性能。 | 在 users.xml 中设置。 | 0(禁用) | 建议设置为 0。 |
| 关闭表达式编译优化,避免复杂向量计算的编译耗时。 | 在 users.xml 中设置。 | 0(禁用) | 建议设置为 0。 |
| 关闭排序描述编译优化,提升向量排序操作的性能。 | 在 users.xml 中设置。 | 0(禁用) | 建议设置为 0。 |
| 向量索引可使用的 memory cache 大小。采用 LRU 策略淘汰。 | 在 config.xml 中设置。 | max_server_memory_usage * 0.5 | 需要预留一部分缓存给构建索引使用,考虑到会有后台的合并或者变更任务,建议为索引缓存预留小于等于一半最大内存量,如果合并并发度较高,考虑进一步缩小索引缓存大小。 |
| 启用本地锁机制,减少写入冲突,提升高并发场景下的向量数据写入性能。 | 在 config.xml 中设置。 | 0(禁用) | 建议设置为 1(启用)。 |
| 唯一键索引元数据的缓存大小,优化键值检索性能。 | 在 config.xml 中设置。 | 无 | 建议 2GB 以上。 |
| 唯一键索引数据的缓存大小,提升数据读取速度。 | 在 config.xml 中设置。 | 无 | 建议 5GB 以上。 |
| 动态启用额外服务,无需重启服务。 | 在 config.xml 中设置。 | 0(禁用) | 可按需启用。 |
ByteHouse 支持通过 SQL 和 Python API 使用向量检索,您可参考以下文档进行操作。