Azure Machine Learning - 在 Azure AI 搜索中创建全文查询

Azure AI搜索中如果要为全文搜索生成查询,本文提供了设置请求的步骤。 本文还介绍了查询结构,并说明了字段属性和语言分析器如何影响查询结果。

关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。

file

环境准备

  • [搜索索引],字符串字段属性为 searchable

  • 对搜索索引的读取权限。 若要进行读取访问,请在请求中包含[查询 API 密钥],或者向调用方提供“[搜索索引数据读者]”权限。

全文查询请求的示例

在 Azure AI 搜索中,查询是针对单个搜索索引的文档集合发出的只读请求,其参数既用于通知查询执行又用于形成返回的响应。

全文查询在 search 参数中指定,由字词、带引号的短语和运算符组成。 其他参数将更多定义添加到请求。 例如,searchFields 将查询执行限制为特定字段,select 指定在结果中返回的字段,count 返回在索引中找到的匹配项数。

以下[搜索文档 REST API]调用说明了使用上述参数的查询请求。

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2020-06-30
{"search": "NY +view","queryType": "simple","searchMode": "all","searchFields": "HotelName, Description, Address/City, Address/StateProvince, Tags","select": "HotelName, Description, Address/City, Address/StateProvince, Tags","top": "10","count": "true"
}

要点

  • search 提供匹配条件(通常是整个搜索词或短语,带或不带运算符)。 在索引架构中设置了“searchable”属性的任何字段都适合指定此参数。

  • queryType 设置分析程序:simplefull。 [默认的简单查询分析程序]最适合全文搜索。 [完整的 Lucene 查询分析程序]适用于高级查询构造,如正则表达式、邻近搜索、模糊和通配符搜索。 对于[语义排名],还可以将此参数设置为 semantic,以针对查询响应进行高级语义建模。

  • searchMode 指定是根据表达式中的“所有”条件(精准率优先)还是“任一”条件(召回率优先)进行匹配。 默认值为“any”。 如果你预计会大量使用布尔运算符(在包含大文本块(内容字段或长描述)的索引中较可能发生这种情况),请确保使用 searchMode=Any|All 参数测试查询,以评估该设置对布尔搜索的影响。

  • searchFields 将查询执行约束为特定的可搜索字段。 在开发过程中,为选择和搜索使用同一字段列表会很有帮助。 否则,匹配可能是基于你无法在结果中看到的字段值,从而导致不确定返回文档的原因。

用于形成响应的参数:

  • select 指定要在响应中返回哪些字段。 仅可在 select 语句中使用索引内标记为“可检索”的字段。

  • top 返回指定数目的最匹配的文档。 在本例中,仅返回 10 个命中项。 你可使用 top 和 skip(未显示)分页显示结果。

  • count 指出整体上整个索引中多少文档匹配,该数目可能比返回的数目多。

  • 如果你想要按值(例如排名或位置)对结果分类,则使用 orderby。 否则,默认使用相关性分数对结果进行排名。 字段的属性必须设置为“可排序”才能成为此参数的可能值。

选择客户端

对于早期开发和概念证明测试,请从 Azure 门户或 Postman 应用开始进行 REST API 调用。 这些方法是交互式的,可用于有针对性的测试,有助于评估不同属性的影响,而无需编写任何代码。

若要从应用内调用搜索,请在适用于 .NET、Java、JavaScript 和 Python 的 Azure SDK 中使用 Azure.Document.Search 客户端库。

在门户中,打开索引时,可以使用搜索资源管理器以及并排选项卡中的索引 JSON 定义,以便轻松访问字段属性。 检查“字段”表以查看哪些字段在测试查询时可搜索、可排序、可筛选和可分面。

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

  2. 打开“索引”并选择索引。

  3. 索引将打开“[搜索资源管理器]”选项卡,以便你可以立即查询。 查询字符串可以使用简单语法或完整语法,并支持所有查询参数(filter、select 和 searchFields 等)。

    下面是适用于 Hotels 示例索引的全文搜索查询表达式:

    search=pool spa +airport&$searchFields=Description,Tags&$select=HotelName,Description,Category&$count=true

    以下屏幕截图演示了查询和响应:
    file
    请注意,如果需要特定版本的搜索行为,可以更改 REST API 版本;如果要粘贴查询的 JSON 定义,可以切换到 JSON 视图

Postman 应用可用于处理 REST API,例如[搜索文档 (REST)]。

以下示例调用 REST API 进行全文搜索:

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2020-06-30
{"search": "NY +view","queryType": "simple","searchMode": "all","searchFields": "HotelName, Description, Address/City, Address/StateProvince, Tags","select": "HotelName, Description, Address/City, Address/StateProvince, Tags","count": "true"
}

选择查询类型:简单 | 完整

如果查询是全文搜索,查询分析器将用于处理作为搜索词和短语传递的任何文本。 Azure AI 搜索提供了两个查询分析器。

  • 简单分析程序理解[简单查询语法]。 选择此分析程序作为默认分析程序是因为它在自由格式文本查询中的速度和有效性。 该语法支持将常见搜索运算符(AND、OR、NOT)用于术语和短语搜索,以及前缀 (*) 搜索(例如,使用“sea*”搜索 Seattle 和 Seaside)。 一般建议首先尝试使用简单版分析程序,如果应用程序需要更强大的查询,则可以改用完整版分析程序。

  • 向请求添加 queryType=full 时启用的[完整 Lucene 查询语法]基于 [Apache Lucene 分析程序]。

虽然完整语法和简单语法存在重叠,都支持相同的前缀和布尔操作,但完整语法提供了更多的操作符。 在完整语法中,布尔表达式有了更多运算符,高级查询(如模糊搜索、通配符搜索、邻近搜索和正则表达式)也有了更多运算符。

选择查询方法

搜索本质上是一个用户驱动的活动,该活动从搜索框或页面上的单击事件中收集术语或短语。 下表总结了收集用户输入的机制以及预期的搜索体验。

输入体验
[搜索方法]用户在搜索框中键入术语或短语(不一定带运算符),然后单击“搜索”发送请求。 搜索可与筛选器一起用于同一请求,但不能与自动完成或建议一起使用。
[“自动完成”方法]用户键入几个字符,然后在键入每个新字符后启动查询。 响应是索引中的已完成字符串。 如果提供的字符串有效,则用户单击“搜索”将该查询发送到服务。
[“建议”方法]与自动完成一样,用户键入几个字符并生成增量查询。 响应是匹配文档的下拉列表,通常由几个唯一或描述性字段表示。 如果任何一个选择有效,用户单击其中一个,就会返回匹配的文档。
[多面导航]页面显示可单击的导航链接或导航痕迹,缩小了搜索范围。 分面导航结构基于初始查询动态组合。 例如,search=* 可用于填充由每个可能的类别组成的分面导航树。 分面导航结构是从查询响应创建的,但它也是表示下一个查询的机制。 在 REST API 引用中,facets 作为“搜索文档”操作的查询参数记录,但是它可以在没有 search 参数的情况下使用。
[筛选器方法]筛选器与分面一起使用,以缩小结果范围。 你还可以在页面后面实现一个筛选器,例如用特定于语言的字段初始化页面。 在 REST API 引用中,$filter 作为“搜索文档”操作的查询参数记录,但是它可以在没有 search 参数的情况下使用。

字段属性对查询的影响

如果你熟悉[查询类型和组合],可能还记得查询请求上的参数取决于字段在索引中的属性。 例如,查询和搜索结果中只能使用标记为 searchableretrievable 的字段。 在请求中设置 searchfilterorderby 参数时,应检查属性以避免意外结果。

在[酒店示例索引]下面的门户屏幕截图中,只有最后两个字段“LastRenovationDate”和“Rating”是 sortable,这仅是在 "$orderby" 子句中使用的要求。
file

标记对查询的影响

在索引过程中,搜索引擎对字符串使用文本分析器,以最大程度地提高在查询时找到匹配项的可能性。 字符串至少是小写的,但根据分析器的情况,也可能需要进行词形还原和停用词删除。 较大的字符串或复合词通常由空格、连字符或短划线分隔,并作为单独的标记编制索引。

这里要注意的一点是,你认为索引包含的内容和索引实际包含的内容可能会有所不同。 如果查询没有返回预期的结果,则可以通过[分析文本 (REST API)]检查分析器创建的标记。 有关词汇切分及其对查询的影响的详细信息,请参阅[具有特殊字符的部分术语搜索和模式。

关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/191159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RISC-V_WCH系列微控器软件体系云端快速架构

1 概述 RISC-V内核的微控器MCU,正在以更高的性价比,快速取代传统的各类ARM系列微控制处理器。 针对常用的芯成RISC-V内核的泌恒WCH系列微控器MCU,推出了:RISC-V_WCH系列微控器软件体系快速架构云平台。只要以身份证号码做用户名…

交换综合实验

目录 一、实验拓扑 二、实验要求 三、实验步骤 1、链路聚合(配置Eth-trunk) 2、配置vlan(创建划分vlan,配置trunk干道) 3、MSTP配置 4、VRRP配置 5、DHCP配置 6、vlan互通 7、NAT配置(做ACL&#…

idea 旧项目替换成新项目(项目名称,模块,代码)

文章目录 修改项目名全局替换包名替换模块、文件前缀(一定要先替换包名)局部替换xml、yml等其他文件修改本地项目文件夹名称修改git配置 修改项目名 右击项目名称->Refactor->Rename(shiftF6) ctrlaltshifts 全局替换包名 全局选中包名替换&…

C++入门篇第十篇----继承

前言: 本篇我们将开始讲解C的继承,我想要说的是,C的主体基本就是围绕类和对象展开的,继承也是以类和对象为主体,可以说,C相较于C优化的地方就在于它对于结构体的使用方法的高度扩展和适用于更多实际的场景…

Java语法之字符串类型

String类 在Java中,使用String类定义字符串类型,如下: String s1"hello";System.out.println(s1); 字符串拼接 只要s1s2即可 在字符串中,如果俩个字符串进行相加,那他就是字符串拼接的意思 补充 如上&am…

c++异常介绍

一 . C语言传统的处理错误的方式 1. 终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。2. 返回错误码,缺陷:需要程序员自己去查找对应的错误。 二 . C异常概念及使用 当一个…

6.7 Windows驱动开发:内核枚举LoadImage映像回调

在笔者之前的文章《内核特征码搜索函数封装》中我们封装实现了特征码定位功能,本章将继续使用该功能,本次我们需要枚举内核LoadImage映像回调,在Win64环境下我们可以设置一个LoadImage映像加载通告回调,当有新驱动或者DLL被加载时…

zookeeper实操课程Acl 访问权限控制,命令行测试

本系列是zookeeper相关的实操课程,课程测试环环相扣,请按照顺序阅读测试来学习zookeeper。阅读本文之前,请先阅读----​​​​​​zookeeper 单机伪集群搭建简单记录(实操课程系列)。 阅读本文之前,请先阅读…

ipvlan介绍

最近使用docker,涉及到需要跨多台物理机部署系统,查了好多资料,最后查到了ipvlan。那什么是vlan,什么又是ipvlan。 交换机层面的vlan,是按802.1Q规范,在链路层中加了4字节的标识vlan的数据,交换…

YUVRGB

一、直观感受 根据上面的图片,不难看出: RGB的每个分量,是对当前颜色的一个亮度值Y分量对呈现出清晰的图像有着很大的贡献Cb、Cr分量的内容不太容易识别清楚YUV将亮度信息(Y)与色度信息(UV)分离…

深入理解原码、反码、补码(结合C语言)

一、引出问题 在学习C语言单目操作符中~按位取反的过程中&#xff0c;对这样一段代码的结果产生了疑惑&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>int main() {int a 0;int b ~a;//按位取反printf("%d\n", b);return 0; }输出结果…

【MySQL】视图 + 用户管理

视图 前言正式开始视图用户管理user表创建新用户修改用户密码权限管理给用户赋权剥夺权限 前言 本篇所讲的视图和我上一篇事务中所讲的读视图不是一个东西&#xff0c;二者没有任何关系&#xff0c;如果看过我前一篇博客的同学不要搞混了。 其实视图和用户管理本来是想着分开…

大数据Doris(三十二):Doris高级功能

文章目录 Doris高级功能 一、​​​​​​​表结构变更

VMware Workstation Pro 17及 Windows 11 虚拟机的安装与激活

六点钟&#xff1a; 吃晚饭吗 不吃&#xff0c;胖胖 十点钟&#xff1a; 阿昊要吃夜宵对不对 ——CSDN&#xff0c;记录牛马生活 本文是在学习 Linux 期间&#xff0c;使用 VMware 时顺带学习 Windows 11 虚拟机的安装与激活 VMware Workstation Pro 17及 Windows 11 虚拟机…

Java Throwable

如图展示了 Java 整个异常体系的关系。 Throwable 的 Java 异常体系的基类, 他的直接子类有 Error 和 Exception 2 个。 1 Error Error 表示的是由于系统错误, Java 虚拟机抛出的异常, 例如 Java 虚拟机崩溃, 内存不够等, 这种情况仅凭程序自身是无法处理的, 在程序中也不会…

004、简单页面-基础组件

之——基础组件 目录 之——基础组件 杂谈 正文 1.Image 1.0 数据源 1.1 缩放 1.2 大小 1.3 网络图片 2.Text 2.0 数据源 2.1 大小 2.2 粗细 2.3 颜色 2.5 样式字体 2.6 基础示例 2.7 对齐 2.8 省略 2.9 划线 3.TextInput 3.1 输入类型 3.2 提示文…

量子测量-技术点杂录

目录: 高质量文章导航-持续更新中_GZVIMMY的博客-CSDN博客 前置:量子测量设备 电子显微镜:电子显微镜可以在非常高分辨率下观察生物组织、细胞和分子结构。通过调整电子束的强度和聚焦来观察细胞内部的微小结构。但是,电子显微镜需要对样品进行切片处理,而且在真空中进行…

HbuilderX 项目打包文件过大问题优化

文章目录 HbuilderX 项目打包文件过大问题优化主要操作收效甚微&#xff0c;但又有那么点用的方法使用 gulp 压缩&#xff08;最后一步&#xff09;使用与配置 网上找的 gulp 优化压缩配置还未尝试可能有用的方法 尝试过程中看到的一些优质文章 HbuilderX 项目打包文件过大问题…

Shell循环:for(三)

示例&#xff1a;使用for实现批量主机root密码的修改 一、前提 已完成密钥登录配置&#xff08;ssh-keygen&#xff09;定义主机地址列表并了解远程修改密码的方法 [rootlocalhost ~]# ssh-keygen #设置免密登录[rootlocalhost ~]# ssh-copy-id 192.168.151.151 二、演示…

科研学习|论文解读——Open government research over a decade: A systematic review

Open government research over a decade: A systematic review 十年来的开放政府研究&#xff1a;一个系统性综述 摘要 在过去十年中&#xff0c;对开放政府的学术研究蓬勃发展。然而&#xff0c;对开放政府的全面审查是有限的。这一研究空白不仅阻碍了我们对开放政府整体知…