构建高效搜索系统 - Faiss向量数据库的快速入门

目录

快速入门

创建第一个Faiss索引

加载数据到索引中

执行基本查询

评估索引性能


快速入门

创建第一个Faiss索引

先需要导入必要的库,并定义一个索引对象。使用最基础的Flat索引作为例子。

bash 复制代码
import numpy as np
import faiss

# 设置向量的维度
d = 128

# 创建一个Flat索引,使用L2(欧几里得)距离
index = faiss.IndexFlatL2(d)

# 打印索引信息
print("Index created:", index)

先导入numpyfaiss库。指定了向量的维度为128,并创建一个基于L2距离的Flat索引对象。IndexFlatL2是最简单的索引类型,会在内存中存储所有的向量,并计算所有向量间的距离来找出最近邻。

加载数据到索引中

需要生成一些随机向量数据,并将其添加到刚刚创建的索引中。

bash 复制代码
# 生成10000个随机向量
nb = 10000
np.random.seed(1234)  # 设置随机种子以确保每次运行都得到相同结果
xb = np.random.random((nb, d)).astype('float32')

# 将向量数据归一化到单位长度
xb /= np.linalg.norm(xb, axis=1, keepdims=True)

# 添加向量到索引
index.add(xb)
print("Vectors added to index.")

在这个步骤中,先设定了要添加的向量数量为10000个,并生成这些向量。为使距离度量更加有效,将向量进行了归一化处理。最后调用了add方法将这些向量添加到了索引中。

执行基本查询

可以尝试使用一些查询向量来测试索引是否正常工作。

bash 复制代码
# 生成10个查询向量
nq = 10
xq = np.random.random((nq, d)).astype('float32')
xq /= np.linalg.norm(xq, axis=1, keepdims=True)

# 执行搜索,返回每个查询向量的k个最近邻
k = 4
D, I = index.search(xq, k)

# 输出结果
print("Distances:")
print(D)
print("Indices:")
print(I)

这里生成了10个查询向量,并设置了返回最近邻的数量为4。index.search函数执行了实际的搜索操作,并返回了两组结果:D表示查询向量到最近邻的距离,I表示这些最近邻的索引号。

评估索引性能

为了评估索引的性能,可以测量查询所需的时间,并检查返回结果的正确性。

bash 复制代码
import time

# 测量搜索耗时
start_time = time.time()
D, I = index.search(xq, k)
end_time = time.time()

# 计算查询时间
search_time = end_time - start_time
print(f"Search took {search_time:.4f} seconds.")

# 检查结果是否合理
print("Checking results...")
assert D.shape == (nq, k)
assert I.shape == (nq, k)
print("Results are valid.")

在这段代码中使用Python的time模块来记录搜索操作的起始和结束时间,从而计算出总的查询耗时。还通过断言检查了返回结果的形状是否符合预期,以此验证结果的有效性。

相关推荐
codefan※4 小时前
RAG 加速指南:Faiss / Milvus / Qdrant 向量库选型与调优
知识图谱·milvus·faiss·向量数据库·rag·qdrant
Esaka_Forever3 天前
FAISS (Facebook AI Similarity Search)
人工智能·faiss
Muyuan199814 天前
31.Cursor 初体验:用 AI Agent 给 PaperPilot 做一次最小工程重构
人工智能·python·重构·django·fastapi·faiss
Muyuan199815 天前
29.从 FAISS 到 Milvus:给我的 RAG Agent 项目加一层可替换的向量检索后端
fastapi·milvus·faiss
qq_2837200520 天前
LangChain+FAISS 向量数据库搭建轻量化 RAG 应用
数据库·langchain·faiss
qq_283720051 个月前
纯本地 RAG 系统部署详细教程:DeepSeek+BGE+FAISS
faiss
狐狐生风1 个月前
LangChain 向量存储:Chroma、FAISS
人工智能·python·学习·langchain·faiss·agentai
Muyuan19981 个月前
27.RAG 系统中的上下文充分性判断:从 Chunk 数量、FAISS 距离到 LLM Relevance Gate
python·django·pdf·fastapi·faiss
chushiyunen1 个月前
faiss向量检索库(并非向量数据库)
数据库·faiss
AI木马人1 个月前
8.【向量数据库深度对比】Milvus vs FAISS vs Pinecone(真实项目选型指南)
数据库·milvus·faiss