向量搜索引擎是一种专门用于处理高维向量数据相似性搜索的系统。与传统的基于关键词的搜索不同,向量搜索引擎通过计算向量之间的距离或相似度来找到最相关的结果。
在数学中,向量是具有大小和方向的量。在计算机科学中,向量通常表示为一个数值数组,每个数值代表在特定维度上的值。
向量示例:
v1 = [1.0, 2.0, 3.0, 4.0] // 4维向量
v2 = [0.5, 1.5, 2.5, 3.5] // 4维向量
随着向量维度的增加,传统的搜索方法会遇到"维度灾难"问题:
为了解决维度灾难,我们通常采用近似最近邻(Approximate Nearest Neighbor, ANN)搜索:

小世界网络具有以下特性:

HNSW通过构建多层图结构来实现高效搜索:

不同的应用场景需要选择合适的距离度量:
距离度量 | 适用场景 | 特点 |
|---|---|---|
欧几里得距离 | 通用场景,图像特征 | 考虑绝对距离 |
余弦距离 | 文本搜索,推荐系统 | 只考虑方向,不考虑大小 |
曼哈顿距离 | 城市距离,某些机器学习算法 | 对异常值不敏感 |
汉明距离 | 二进制特征,编码距离 | 适用于离散数据 |

通过本书的学习,你将:
jvector/
├── src/main/java/com/jvector/
│ ├── api/ # 公共API接口
│ ├── core/ # 核心数据结构
│ ├── index/ # 索引实现
│ ├── compute/ # 计算引擎
│ ├── storage/ # 存储系统
│ └── utils/ # 工具类
├── src/test/java/ # 测试代码
└── pom.xml # Maven配置
本章介绍了向量搜索引擎的基本概念、理论基础和主要挑战。我们了解了HNSW算法的核心思想、常用的距离度量方法以及性能评估指标。在接下来的章节中,我们将逐步实现一个完整的Java向量搜索引擎,从项目架构设计开始,逐步深入到算法实现和性能优化。
思考题: