共用方式為

在 Azure AI 搜索中创建混合查询

混合搜索将文本(关键字)和矢量查询结合在单个搜索请求中。 这两个查询并行执行。 结果按新的搜索分数进行合并和重新排序,使用倒数排名融合 (RRF) 返回一个统一的结果集。

在本文中,您将学习如何:

  • 设置基本混合请求
  • 添加参数和筛选器
  • 使用语义排名或矢量权重提高相关性
  • 通过控制输入优化查询行为 (maxTextRecallSize

先决条件

选择 API 或工具

  • Azure 门户中的搜索资源管理器(支持稳定版和预览版 API 搜索语法)有一个 JSON 视图,可让你将混合请求粘贴进去。

  • 如果使用的是 maxTextRecallSize 和 countAndFacetMode(预览版)等预览功能,则使用稳定的 REST API 或最近的预览 API 版本。

    为了方便阅读,我们使用 REST 示例来解释 API 的工作原理。 可以使用带 REST 扩展的 REST 客户端(例如 Visual Studio Code)来构建混合查询。 还可以使用 Azure SDK。 有关详细信息,请参阅 快速入门:矢量搜索

设置混合查询

本部分介绍混合查询的基本结构,以及如何在搜索资源管理器中设置一个查询或在 REST 客户端中执行。

结果均以纯文本形式返回,包括标记为 retrievable 的字段中的矢量。 由于数值矢量在搜索结果中不起作用,因此请选择索引中的其他字段作为矢量匹配的代理。 例如,如果索引具有“descriptionVector”和“descriptionText”字段,则查询可以匹配“descriptionVector”,但搜索结果可以显示“descriptionText”。 使用 select 参数仅指定结果中可人工读取的字段。

  1. 登录到 Azure 门户 并查找搜索服务。

  2. “搜索管理>索引”下,选择包含矢量和非矢量内容的索引。 搜索资源管理器 是第一个选项卡。

  3. “视图”下切换到 JSON 视图 ,以便可以粘贴向量查询。

  4. 将默认查询模板替换为混合查询。 基本混合查询具有指定的 search文本查询,以及指定的 vectorQueries.vector向量查询。 文本查询和矢量查询可以等价,也可以不等价,但通常具有相同的意向。

    此示例来自矢量快速入门,其中包含矢量和非矢量内容,以及多个查询示例。 为简洁起见,本文中截断了矢量。

    {
        "search": "historic hotel walk to restaurants and shopping",
        "vectorQueries": [
            {
                "vector": [0.01944167, 0.0040178085, -0.007816401 ... <remaining values omitted> ], 
                "k": 7,
                "fields": "DescriptionVector",
                "kind": "vector",
                "exhaustive": true
            }
        ]
    }
    
  5. 选择搜索

    提示

    如果隐藏矢量,搜索结果将更易读。 在“查询选项”中,启用“在搜索结果中隐藏矢量值”

  6. 下面是另一个版本的查询。 这一项包含一个 count 用于显示找到的匹配项数量,一个 select 参数用于选择特定字段,以及一个 top 参数用于返回前七个结果。

     {
         "count": true,
         "search": "historic hotel walk to restaurants and shopping",
         "select": "HotelId, HotelName, Category, Tags, Description",
         "top": 7,
         "vectorQueries": [
             {
                 "vector": [0.01944167, 0.0040178085, -0.007816401 ... <remaining values omitted> ], 
                 "k": 7,
                 "fields": "DescriptionVector",
                 "kind": "vector",
                 "exhaustive": true
             }
         ]
     }