你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

精确近邻 (ENN) 矢量搜索以精确检索

精确近邻(ENN)矢量搜索对所有索引向量执行详尽的距离计算,以确保根据指定的距离指标检索最近的邻居。所有群集层都支持 ENN,无需额外付费,无需注册。

ENN 矢量搜索在查询向量与数据集中的每个向量之间进行全面比较。 此方法可确保:

  • 保证的准确性:根据所选距离指标(例如,Euclidean 距离、余弦相似性)检索最接近的邻居。
  • 计算负载增加:由于其详尽性,ENN 资源密集型程度更高,可能会导致查询时间更长,尤其是大型数据集。

相反,近似最近的邻域 (ANN) 搜索使用索引技术,如分层可导航小世界 (HNSW)、倒排文件 (IVF) 或 DiskANN 来加快搜索速度。 虽然 ANN 提供更快的响应时间和更好的可伸缩性,但它可能并不总是返回绝对最近的邻域。

请考虑在以下方案中使用 ENN 矢量搜索:

  • 高准确度要求:对于精确 top-k 结果至关重要(例如敏感建议系统或科学研究)的应用程序,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) 搜索 利用专用索引技术为大型数据集提供更快的响应和更好的可伸缩性,尽管它可能会稍微损害准确性。

后续步骤