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

2024-08-28 07:28

本文主要是介绍构建高效搜索系统 - Faiss向量数据库的快速入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

快速入门

 创建第一个Faiss索引

 加载数据到索引中

执行基本查询

评估索引性能


快速入门

 创建第一个Faiss索引

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

import numpy as np
import faiss# 设置向量的维度
d = 128# 创建一个Flat索引,使用L2(欧几里得)距离
index = faiss.IndexFlatL2(d)# 打印索引信息
print("Index created:", index)

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

 加载数据到索引中

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

# 生成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方法将这些向量添加到了索引中。

执行基本查询

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

# 生成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表示这些最近邻的索引号。

评估索引性能

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

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模块来记录搜索操作的起始和结束时间,从而计算出总的查询耗时。还通过断言检查了返回结果的形状是否符合预期,以此验证结果的有效性。

这篇关于构建高效搜索系统 - Faiss向量数据库的快速入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114111

相关文章

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核