共用方式為

从存储中消除可选矢量实例

Azure AI 搜索会存储特定工作负载中使用的矢量字段的多个副本。 如果搜索方案不需要所有这些副本,则可以省略该工作负荷的存储。

使用额外副本的用例包括:

  • 在查询响应中返回原始向量或支持向量内容的增量更新。
  • 将压缩的(量化)向量重新评分,作为查询优化技术。

移除存储是不可逆的,如果你之后想要恢复存储内容,则需要重新建立索引。

先决条件

  • 搜索索引中的矢量字段,通过vectorSearch配置可选分层导航小型世界(HNSW)或详尽 K-最近邻(KNN)算法,以及新的矢量描述。

如何存储矢量字段

实例 用法 搜索必需 如何删除
HNSW 图中用于近似最近邻(ANN)搜索的向量,或用于详尽 K-最近邻(eKNN 索引)搜索的向量 用于查询执行。 包括全精度矢量(未应用压缩时)或量化矢量。 Essential 没有用于移除该实例的参数。
在文档索引过程中接收到的源矢量(JSON 数据) 用于增量数据刷新,结合mergemergeOrUpload索引操作。 也用于在查询响应中返回“可检索”矢量。 stored 属性设置为 false。
原始全精度向量 (二进制数据) 1 对于压缩矢量,它用于 preserveOriginals 对 ANN 搜索中过采样的候选结果集进行重新评分。 这适用于进行 标量或二进制量化的向量字段,并且适用于使用 HNSW 图形的查询。 如果使用 eKNN,则所有向量都在查询范围内,因此重新记录不起作用,因此不受支持。 rescoringOptions.rescoreStorageMethod 属性设置为 discardOriginalsvectorSearch.compressions

1 对于使用 2023 API 创建的索引,此副本还适用于内部索引操作以及旧 API 版本中的详尽 KNN 搜索。 在较新的索引上,eKNN 配置的字段由全精度向量组成,因此不需要额外的复制。

移除源矢量(JSON 数据)

在向量字段定义中,是一个布尔属性, stored 用于确定是否为在索引编制期间获取的可检索向量内容(源实例)分配存储。 默认情况下,stored 设置为 true。 如果查询响应中不需要原始矢量内容,则更改为storedfalse每个字段最多可节省 50 个% 存储。

设置 "stored": false注意事项:

  • 由于矢量不可读,因此通常情况下,可以在 RAG 方案中将其从发送到 LLM 的结果中省略,或从搜索页面呈现的结果中去除。 但是,如果在使用矢量内容的下游进程中使用向量,则应保留它们。

  • 如果索引策略使用 部分文档更新(例如 mergemergeOrUpload 对现有文档),则设置 "stored": false 可防止合并期间对这些字段进行内容更新。 必须在每个重新编制索引作中包括整个向量字段(以及要更新的非矢量字段)。 否则,矢量数据会丢失,且不会产生错误或警告。 若要完全避免这种风险,请设置 "stored": true

重要

设置 "stored": false 属性是不可逆的。 只能在创建索引时设置此属性,并且仅在矢量字段上允许此属性。 使用新矢量字段更新现有索引不能将此属性设置为 false。 如果以后想要检索矢量内容,则必须删除并重新生成索引,或创建并加载具有新属性的新字段。

对于搜索索引中的新向量字段,设置为 "stored": false 永久删除矢量字段的可检索存储。 以下示例显示了具有 stored 属性的矢量字段定义。

PUT https://[service-name].search.azure.cn/indexes/demo-index?api-version=2025-09-01@search.rerankerBoostedScore 
  Content-Type: application/json  
  api-key: [admin key]  

    { 
      "name": "demo-index", 
      "fields": [ 
        { 
          "name": "vectorContent", 
          "type": "Collection(Edm.Single)", 
          "retrievable": false, 
          "stored": false, 
          "dimensions": 1536, 
          "vectorSearchProfile": "vectorProfile" 
        } 
      ] 
    } 

要点总结

  • 适用于具有 矢量数据类型的字段。

  • 影响磁盘上的存储,而不是内存,对查询没有影响。 查询执行使用不受 stored 属性影响的单独矢量索引,因为始终会存储矢量的副本。

  • stored 属性是在矢量字段上创建索引期间设置的,并且是不可逆的。 如果以后想要检索内容,则必须删除并重新生成索引,或创建并加载具有新属性的新字段。

  • 默认值为 "stored": true"retrievable": false。 在默认配置中,存储可检索的副本,但不会在结果中自动返回。 当storedtrue时,您可以在任意时间将retrievabletruefalse之间切换,而无需重新生成索引。 storedfalse时,retrievable必须false,并且不能更改。

移除原始全精度矢量

原始全精度向量用于对压缩(量化)向量的重新评分操作。 重新记录的目的是缓解由于压缩而导致的信息丢失。 重排序的效果是从压缩索引中检索更大的一组候选文档,并使用原始向量或点积重新计算相似性分数。 为了使重新评分起作用,在某些情况下必须在存储中保留原始矢量。 因此,尽管量化会减少内存使用量(矢量索引大小的使用),但由于同时存储了压缩矢量和原始矢量,它会略微增加存储需求。 额外的存储量大约等于压缩索引的大小。

通过量化方法对要求重新评分:

  • 重新记录标量量化向量需要保留原始全精度向量。

  • 重新记录二元量化向量可以使用原始全精度向量或二进制嵌入的点积,这会产生高质量的搜索结果,而无需在索引中引用全精度矢量。

重新评分建议:

  • 对于标量量化,应在索引中保留原始全精度矢量,因为重新评分时需要用到它们。

  • 对于二进制量化,如果要达到最高质量的重新评分,请保留原始全精度向量;如果要根据二进制嵌入的点积重新评分,则可以放弃全精度向量。

rescoreStorageMethod 属性用于控制是否存储全精度矢量。 在 vectorSearch.compressions 中,rescoreStorageMethod 属性默认设置为 preserveOriginals,该属性保留用于过度采样和重新记录功能的全精度矢量,以减少对 HNSW 图的丢失压缩的影响。 如果不需要重评分,或者已经使用二进制量化和点积进行重评分,可以通过将 rescoreStorageMethod 设置为 discardOriginals 来减少矢量存储。

重要

设置 rescoreStorageMethod 属性是不可逆的,并且可能会对搜索质量产生不利影响,尽管影响程度取决于压缩方法以及应用的任何缓解措施。

要设置此属性,请执行以下操作:

  1. 使用 创建索引创建或更新索引 REST API 或 Azure SDK。

  2. 使用配置文件、算法和压缩将 vectorSearch 部分添加到索引。

  3. vectorSearch.compressions 下,添加 rescoringOptions,并将 enableRescoring 设置为 true,defaultOversampling 设置为正整数,对于二进制量化,将 rescoreStorageMethod 设置为 discardOriginals;对于标量量化,将其设置为 preserveOriginals

    PUT https://[service-name].search.azure.cn/indexes/demo-index?api-version=2025-09-01
    
    {
        "name": "demo-index",
        "fields": [. . . ],
        . . .
        "vectorSearch": {
            "profiles": [
                {
                "name": "myVectorProfile-1",
                "algorithm": "myHnsw",
                "compression": "myScalarQuantization"
                },
                {
                "name": "myVectorProfile-2",
                "algorithm": "myHnsw",
                "compression": "myBinaryQuantization"
                }
            ],
            "algorithms": [
              {
                "name": "myHnsw",
                "kind": "hnsw",
                "hnswParameters": {
                  "metric": "cosine",
                  "m": 4,
                  "efConstruction": 400,
                  "efSearch": 500
                },
                "exhaustiveKnnParameters": null
              }
            ],
            "compressions": [
                {
                    "name": "myScalarQuantization",
                    "kind": "scalarQuantization",
                    "rescoringOptions": {
                        "enableRescoring": true,
                        "defaultOversampling": 10,
                        "rescoreStorageMethod": "preserveOriginals"
                    },
                    "scalarQuantizationParameters": {
                        "quantizedDataType": "int8"
                    },
                    "truncationDimension": null
                },
                {
                    "name": "myBinaryQuantization",
                    "kind": "binaryQuantization",
                    "rescoringOptions": {
                        "enableRescoring": true,
                        "defaultOversampling": 10,
                        "rescoreStorageMethod": "discardOriginals"
                    },
                    "truncationDimension": null
                }
            ]
        }
    }
    

注释

在过去的几个版本中,矢量存储策略一直在不断发展。 索引创建日期和 API 版本决定了存储选项。 例如,在 2024-11-01-preview 中,如果设置为 discardOriginals 删除全精度向量,由于未提供点积方法,因此二进制量化没有重新计分。 建议使用最新的 API 来获得最佳缓解选项。