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

在 Azure AI 搜索中创建语义查询

在本文中,了解如何对结果集调用语义排名,从而将语义上最相关的结果提升到堆栈顶部。 还可以获取语义标题,其中突出显示了最相关的术语和短语,以及语义答案

先决条件

注意

标题和答案会从搜索文档的文本中逐字提取。 语义子系统使用计算机阅读理解来识别具有标题或答案特征的内容,但不会撰写新句子或短语。 出于此原因,包含解释或定义的内容最适用于语义排名。 如果希望与生成的响应进行聊天式交互,请参阅检索增强生成 (RAG)

选择客户端

选择一个支持语义排名的搜索客户端。 提供以下选择:

避免绕过相关性评分的功能

Azure AI 搜索中的多个查询功能绕过了相关性评分,否则就会与语义排名不兼容。 如果你的查询逻辑包含以下功能,则无法对结果进行语义排名:

  • 包含 search=* 或空搜索字符串的查询(例如纯筛选器查询)将不起作用,因为没有任何内容可供度量语义相关性。 查询必须提供可在处理过程中评估的词语或短语。

  • 使用完整 Lucene 语法 (queryType=full) 编写的查询与语义排名 (queryType=semantic) 不兼容。 语义模型不支持完整的 Lucene 语法。

  • 对特定字段进行排序(orderBy 子句)会覆盖搜索分数和语义分数。 鉴于语义分数应该用于提供排名,如果你对有序结果应用语义排名,添加 orderby 子句会导致 HTTP 400 错误。

设置查询

在此步骤中,将参数添加到查询请求。 若要成功,查询应是全文搜索(使用 search 参数传入字符串),并且索引应包含具有丰富语义内容的文本字段和一个语义配置。

搜索资源管理器包括语义排序的选项。

  1. 登录 Azure 门户

  2. 打开搜索索引并选择“搜索资源管理器”。

  3. 选择“查询选项”。 如果已定义语义配置,则默认选择该配置。 如果未定义,请为索引创建语义配置

    Screenshot showing query options in Search explorer.

  4. 输入查询,如“拥有美食的历史酒店”,然后选择“搜索”。

  5. 或者,选择 JSON 视图并将定义粘贴到查询编辑器中:

    Screenshot showing JSON query syntax in the Azure portal.

    下面是可以粘贴到视图中的一些 JSON 文本:

     {
         "queryType": "semantic",
         "search": "historic hotel with good food",
         "semanticConfiguration": "my-semantic-config",
         "answers": "extractive|count-3",
         "captions": "extractive|highlight-true",
         "highlightPreTag": "<strong>",
         "highlightPostTag": "</strong>",
         "select": "HotelId,HotelName,Description,Category",
         "count": true
     }
    

评估响应

只有最初结果中的前 50 个匹配项可以进行语义排序。 与所有查询一样,响应由标记为可检索的所有字段组成,或仅仅由 select 参数中列出的那些字段组成。 响应包括原始相关性分数,还可能包括计数或批处理结果,具体取决于你的请求的表述方式。

在语义排名中,响应包含更多元素:一个在语义上排名的新相关性分数、一个可选标题(纯文本或带有突出显示效果),以及一个可选答案。 如果结果不包含这些额外元素,则表示查询可能配置错误。 作为解决问题的第一步,请检查语义配置,以确保在索引定义和查询中都指定了它。

在客户端应用中,可以将搜索页面构建为包含一个标题作为匹配项的说明,而不是包含特定字段的全部内容。 此方法在“搜索结果”页的各个字段过于密集时很有用。

上述示例查询的响应将返回以下匹配项作为首选项。 返回标题是因为设置了“captions”属性,具有纯文本和突出显示的版本。 示例中省略了答案,因为无法为此特定查询和语料库确定答案。

"@odata.count": 35,
"@search.answers": [],
"value": [
    {
        "@search.score": 1.8810667,
        "@search.rerankerScore": 1.1446577133610845,
        "@search.captions": [
            {
                "text": "Oceanside Resort. Luxury. New Luxury Hotel. Be the first to stay. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
                "highlights": "<strong>Oceanside Resort.</strong> Luxury. New Luxury Hotel. Be the first to stay.<strong> Bay</strong> views from every room, location near the pier, rooftop pool, waterfront dining & more."
            }
        ],
        "HotelName": "Oceanside Resort",
        "Description": "New Luxury Hotel. Be the first to stay. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
        "Category": "Luxury"
    },
  ...
]

后续步骤

语义排序可用于将关键字搜索和矢量搜索合并到单个请求和统一响应的混合查询。