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系列微控器软件体系快速架构云平台。只要以身份证号码做用户名…

C#拼夕夕自动化登录,电商网页自动化操作。WebView2

单纯靠WebView2是没办法通过JS实现自动登录操作的,包括浏览器插件,都不行,因为大公司对反爬机制控制的还是挺严格。 下面是实现效果,私信我,咨询解决方案。 20231202_153912 C#有偿Q群:927860652博客仅为…

交换综合实验

目录 一、实验拓扑 二、实验要求 三、实验步骤 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优化的地方就在于它对于结构体的使用方法的高度扩展和适用于更多实际的场景…

如何查看linux块大小

1.fdisk -l 查看块大小: [rootlocalhost alice]# fdisk -l Disk /dev/sda:300 GiB,322122547200 字节,629145600 个扇区 单元:扇区 / 1 * 512 512 字节 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小…

go使用aes加密算法

工具代码 package toolimport ("bytes""crypto/aes""crypto/cipher" )// AES加密函数 var key []byte []byte("0#3456789ABCDEF") //todo 记住这个长度只能是16 24 32 如果不是的话话会报错 func Encrypt(data []byte) ([]byte, er…

说一说MySQL中的锁机制

说一说MySQL中的锁机制 按粒度大小从大到小分为 全局锁 全局锁 全局锁是对整个数据库的锁,最常用的全局锁就是读写锁 读锁 阻止其他用户更新数据,允许其他用户读数据写锁 阻止其他用户更新和读数据 修改一些大量的数据,并且不希望其他用户…

Java语法之字符串类型

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

ARM架构基础简介

目录 一、概述 二、关于ARM架构 三、我们所说的架构是什么意思? 四、系统架构

c++异常介绍

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

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

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

Android监听用户的截屏、投屏、录屏行为

Android监听用户的截屏、投屏、录屏行为 一.截屏 方案一:使用系统广播监听截屏操作 ​ 从Android Q(10.0)开始,Intent.ACTION_SCREEN_CAPTURED_CHANGED字段不再被支持。这是因为Google在安卓10 中引入了一个新的隐私限制&#…

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

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

Oauth2.0 学习

OAuth 2.0 服务器端通常通过验证每次请求中的访问令牌(access token)的方式来确保其合法性和有效性。以下是一些通常采用的验证方法: Token Validation Endpoint: OAuth 2.0 规范允许实现一个专门的令牌验证端点,称为 Token Valid…

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; }输出结果…

TypeScript 变量声明详细教程

文章目录 前言var 声明作用域规则变量获取怪异之处let 声明块作用域重定义及屏蔽块级作用域变量的获取const 声明let vs. const解构数组对象解构属性重命名后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;vue.js &#x1f431;‍&#x…

【MySQL】视图 + 用户管理

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