如何将已加载的FAISS向量存储内容存入SQLite3数据库?
将FAISS向量数据存入SQLite3数据库的实现方案
核心思路
既然已经把FAISS存储的元数据转成了包含chunk_id、document、page、content的DataFrame,只需要提取FAISS中的向量数据,和DataFrame合并后直接写入SQLite即可——SQLite支持二进制(BLOB)或字符串格式存储向量,以下是具体实现步骤:
步骤1:提取FAISS中的向量数据
从已加载的FAISS索引中批量提取所有向量,确保数量和DataFrame的86行对应:
# 假设已加载好FAISS索引:faiss_index = faiss.read_index("faiss index/index.faiss") vectors = faiss_index.reconstruct_n(0, faiss_index.ntotal)
步骤2:向量格式转换与DataFrame合并
SQLite没有原生向量类型,推荐用二进制格式存储(节省空间且读取效率高),将向量转成二进制后添加到DataFrame:
import numpy as np # 将每个向量转成二进制 df['vector'] = [vec.tobytes() for vec in vectors]
如果需要可视化查看向量内容,也可以转成逗号分隔的字符串:
df['vector'] = [','.join(map(str, vec)) for vec in vectors]
步骤3:写入SQLite数据库
用Python内置的sqlite3库连接数据库,创建表后直接通过Pandas的to_sql方法写入数据:
import sqlite3 # 连接SQLite数据库(不存在则自动创建) conn = sqlite3.connect('faiss_documents.db') # 创建数据表(确保字段匹配你的DataFrame) create_table_sql = """ CREATE TABLE IF NOT EXISTS faiss_documents ( chunk_id TEXT PRIMARY KEY, document TEXT, page INTEGER, content TEXT, vector BLOB -- 如果用字符串存储则改为TEXT ) """ conn.execute(create_table_sql) # 将DataFrame写入数据库(if_exists可选replace/append/fail) df.to_sql('faiss_documents', conn, if_exists='replace', index=False) # 提交操作并关闭连接 conn.commit() conn.close()
后续读取向量的方法
如果用二进制存储,读取后还原成FAISS可用的向量:
conn = sqlite3.connect('faiss_documents.db') cursor = conn.cursor() cursor.execute("SELECT vector FROM faiss_documents WHERE chunk_id = ?", ('your_chunk_id',)) vector_bytes = cursor.fetchone()[0] # 还原为float32类型的numpy数组(FAISS默认向量类型) vector = np.frombuffer(vector_bytes, dtype=np.float32) conn.close()
内容的提问来源于stack exchange,提问作者Ejaz Habib Dar
相关产品推荐
相关产品推荐

