你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
精确近邻(ENN)矢量搜索对所有索引向量执行详尽的距离计算,以确保根据指定的距离指标检索最近的邻居。所有群集层都支持 ENN,无需额外付费,无需注册。
精确最近的邻域 (ENN) 矢量搜索是什么?
ENN 矢量搜索在查询向量与数据集中的每个向量之间进行全面比较。 此方法可确保:
- 保证的准确性:根据所选距离指标(例如,Euclidean 距离、余弦相似性)检索最接近的邻居。
- 计算负载增加:由于其详尽性,ENN 资源密集型程度更高,可能会导致查询时间更长,尤其是大型数据集。
相反,近似最近的邻域 (ANN) 搜索使用索引技术,如分层可导航小世界 (HNSW)、倒排文件 (IVF) 或 DiskANN 来加快搜索速度。 虽然 ANN 提供更快的响应时间和更好的可伸缩性,但它可能并不总是返回绝对最近的邻域。
何时应使用 ENN 矢量搜索?
请考虑在以下方案中使用 ENN 矢量搜索:
- 高准确度要求:对于精确 top-k 结果至关重要(例如敏感建议系统或科学研究)的应用程序,ENN 可确保最大准确性。
- 可管理数据集大小:处理较小的数据集或性能约束不太严格时,ENN 的详尽性质是可行的。
- 低选择性筛选:如果应用导致数据子集相对较小的筛选器,ENN 可以有效地在此子集内执行详尽的比较。
例如:在包含租户分类的数百万个文档的大型数据集中,可在特定租户中执行矢量搜索(包括几千个向量)可由 ENN 有效处理。
如何使用 ENN 矢量搜索
在使用 ENN 矢量搜索之前,请确保为相关路径创建 矢量索引 (例如 IVF、HNSW、DiskANN)。 如果已存在向量索引,则无需在搜索方法之间切换时重新生成索引,因为 ENN 在查询执行期间独立于这些索引运行。
若要启用 ENN,请在查询中设置 "exact": true
。 例如:
{
"$search": {
"cosmosSearch": {
"path": "myVectorField",
"exact": true, // Enables ENN
"query": [0.2, 0.4, 0.9], // Query vector
"k": 10, // Number of results to return
"filter": {
"tenant_id": { "$eq": "tenant123" }
}
}
}
}
将 ENN 矢量搜索与筛选器组合在一起
ENN 矢量搜索可以与属性或地理空间筛选器结合使用,以将搜索范围缩小到特定数据子集。 应用筛选器后,搜索引擎对筛选的子集执行详尽的距离计算,返回符合筛选条件的前 K 个邻居。
用例方案
客户端维护大约 300,000 个文档的集合,每个文档包含向量字段、字段 tenant_id
(表示数千个租户)和其他属性。 他们观察到,具有筛选器的 tenant_id
ANN 矢量搜索速度缓慢。
通过在保持相同筛选器的同时切换到 ENN 矢量搜索,客户端在查询性能方面实现了 50% 的改进,并获得了 100% 召回率。
常见问题解答
ENN 如何大规模执行?
- 大型数据集的性能:由于需要评估每个向量,因此大型数据集的 ENN 可能较慢,无需选择性筛选。
- 更高的计算成本:ENN 涉及将查询向量与所有(或筛选)向量进行比较,从而导致大型数据集的资源使用率增加。
ANN 与 ENN:有什么区别?
- 精确近邻(ENN)矢量搜索 通过详尽地比较查询向量与所有索引矢量提供 100% 准确性,使其适用于需要精确结果的应用程序,或者处理较小的数据集或筛选子集时。
- 近似近邻 (ANN) 搜索 利用专用索引技术为大型数据集提供更快的响应和更好的可伸缩性,尽管它可能会稍微损害准确性。