faiss向量检索库(并非向量数据库)
文章目录faiss是一个轻量数据库吗?安装依赖最简单示例带持久化的简单示例faiss # 轻量chromadb # 中量milvus # 重量faiss是一个轻量数据库吗?轻量 # 对数据库 # 错它不是一个完整的数据库(没有服务、没有事务、没有分布式)只是一个向量检索库安装依赖注安装的包名是faiss-cpu不是faiss。pip install faiss-cpu最简单示例代码importnumpyasnpimportfaiss datanp.array([[1.0,1.0],[1.0,2.0],[5.0,5.0],[5.0,6.0],[9.0,1.0]],dtypefloat32)# ⚠️ 注意FAISS 必须用 float32# IndexFlatL2 代表计算欧几里得距离直线距离dimension2indexfaiss.IndexFlatL2(dimension)index.add(data)print(f 库里现在有{index.ntotal}条数据)# 进行搜索 假设用户问了一个问题它的向量是 (1.1, 1.1) —— 离 (1,1) 最近querynp.array([[1.1,1.1]],dtypefloat32)# k2 表示返回最近的 2 个结果D,Iindex.search(query,k2)print( 查询向量:,query)print( 距离 (越小越近):,D)print( 找到的索引位置:,I)# 验证I[0][0] 应该是 0因为 data[0] 是 [1.0, 1.0]离 [1.1, 1.1] 最近print(f✅ 最相似的数据是第{I[0][0]}条内容是:{data[I[0][0]]})只需要关注这3个对象1、data (矩阵)你的数据库内容。必须是 float32 格式的 NumPy 数组。2、index (索引)这就是“数据库引擎”。IndexFlatL2 是最基础的索引意思是“把所有数据存下来查的时候一个个算距离”。它不需要训练适合小数据量10万。3、D 和 I (结果)search 函数永远返回两个值。D (Distance)距离。数值越小代表越相似。I (Index)下标。代表这个数据在原来数组里的第几行。带持久化的简单示例要实现持久化核心就是利用FAISS自带的write_index和read_index函数。importnumpyasnpimportfaissimportos# 定义文件名INDEX_FILEmy_faiss_index.bindimension2ifos.path.exists(INDEX_FILE):print(f 发现本地文件{INDEX_FILE}正在加载...)# 【关键步骤】从硬盘读取索引indexfaiss.read_index(INDEX_FILE)else:print(✨ 未找到文件正在创建新索引...)# 1.1 准备数据 (注意这里强制转为 float32)datanp.array([[1.0,1.0],[1.0,2.0],[5.0,5.0],[5.0,6.0],[9.0,1.0]],dtypefloat32)# 1.2 建立索引并添加数据indexfaiss.IndexFlatL2(dimension)index.add(data)# 【关键步骤】将索引保存到硬盘print(f 正在保存索引到{INDEX_FILE}...)faiss.write_index(index,INDEX_FILE)print(✅ 保存完成)querynp.array([[1.1,1.1]],dtypefloat32)D,Iindex.search(query,k2)print(-*30)print(f 查询结果 (距离:{D}, 索引:{I}))print(f当前内存中数据总量:{index.ntotal})
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2560639.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!