Azure Machine Learning - 在 Azure AI 搜索中创建全文查询
Azure AI搜索中如果要为全文搜索生成查询,本文提供了设置请求的步骤。 本文还介绍了查询结构,并说明了字段属性和语言分析器如何影响查询结果。
关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。

环境准备
-
[搜索索引],字符串字段属性为
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设置分析程序:simple、full。 [默认的简单查询分析程序]最适合全文搜索。 [完整的 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 定义,以便轻松访问字段属性。 检查“字段”表以查看哪些字段在测试查询时可搜索、可排序、可筛选和可分面。
-
登录 Azure 门户并查找搜索服务。
-
打开“索引”并选择索引。
-
索引将打开“[搜索资源管理器]”选项卡,以便你可以立即查询。 查询字符串可以使用简单语法或完整语法,并支持所有查询参数(filter、select 和 searchFields 等)。
下面是适用于 Hotels 示例索引的全文搜索查询表达式:
search=pool spa +airport&$searchFields=Description,Tags&$select=HotelName,Description,Category&$count=true以下屏幕截图演示了查询和响应:

请注意,如果需要特定版本的搜索行为,可以更改 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 参数的情况下使用。 |
字段属性对查询的影响
如果你熟悉[查询类型和组合],可能还记得查询请求上的参数取决于字段在索引中的属性。 例如,查询和搜索结果中只能使用标记为 searchable 和 retrievable 的字段。 在请求中设置 search、filter 和 orderby 参数时,应检查属性以避免意外结果。
在[酒店示例索引]下面的门户屏幕截图中,只有最后两个字段“LastRenovationDate”和“Rating”是 sortable,这仅是在 "$orderby" 子句中使用的要求。

标记对查询的影响
在索引过程中,搜索引擎对字符串使用文本分析器,以最大程度地提高在查询时找到匹配项的可能性。 字符串至少是小写的,但根据分析器的情况,也可能需要进行词形还原和停用词删除。 较大的字符串或复合词通常由空格、连字符或短划线分隔,并作为单独的标记编制索引。
这里要注意的一点是,你认为索引包含的内容和索引实际包含的内容可能会有所不同。 如果查询没有返回预期的结果,则可以通过[分析文本 (REST API)]检查分析器创建的标记。 有关词汇切分及其对查询的影响的详细信息,请参阅[具有特殊字符的部分术语搜索和模式。
关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。
相关文章:
Azure Machine Learning - 在 Azure AI 搜索中创建全文查询
Azure AI搜索中如果要为全文搜索生成查询,本文提供了设置请求的步骤。 本文还介绍了查询结构,并说明了字段属性和语言分析器如何影响查询结果。 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&a…...
基于YOLOv8深度学习的钢材表面缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…...
深度学习常见回归分支算法逐步分析,各种回归之间的优缺点,适用场景,举例演示
文章目录 1、线性回归(Linear Regression)1.1 优点1.2 缺点1.3 适用场景1.4 图例说明 2、多项式回归(Polynomial Regression)2.1 优点2.2 缺点2.3 适用场景2.4 图例说明 3、决策树回归(Decision Tree Regression&#…...
Programming Contest 2023(AtCoder Beginner Contest 331)D题 Tile Pattern --- 题解
目录 D - Tile Pattern 题目大意: 思路: 代码: D - Tile Pattern D - Tile Pattern (atcoder.jp) 题目大意: 给你一个n和q,n为局部棋盘大小(n*n) 并且给出局部棋盘中黑白子位置的放置情况,q为查询次数…...
Google测试框架googletest简介与使用方法
环境准备(Ubuntu) 下载 git clone https://github.com/google/googletest.git 安装 cd googletest // 创建build目录 mkdir build cd build //编译安装 cmake .. make sudo make install 检查是否安装成功 ls /usr/local/lib// 存在以下文件则说明…...
进程的创建:fork()
引入 创建进程的方式我们已经学习了一个!在我们运行指令(或者运行我们自己写的可执行程序)的时候不就是创建了一个进程嘛?那个创建进程的方式称为指令级别的创建子进程! 那如果我们想要在代码中创建进程该怎么办呢? fork() for…...
Fabric:创建应用通道
搭建自定义网络可以参考文章: https://blog.csdn.net/yeshang_lady/article/details/134113296 1 创建通道 网络搭建完成之后,就可以开始创建通道了。Fabric V2.5.4中可以在不创建系统通道的情况下直接创建应用通道。 1.1 修改配置文件 先创建配置文…...
力扣每日一题(2023-11-30)
力扣每日一题 题目:1657. 确定两个字符串是否接近 日期:2023-11-30 用时:21 m 07 s 时间:11ms 内存:43.70MB 代码: class Solution {public boolean closeStrings(String word1, String word2) {if(word1.…...
内部类Lambda
静态内部类 /*** 静态成员是在类加载成字节码时就已经存在的,静态只能访问静态*/ public class Demo {public static void main(String[] args) {Outer.Inner.show();} }class Outer {int num1 10;static int num2 20;static class Inner {static void show() {Outer outer …...
设一棵二叉树中各结点的值互不相同,其先序遍历序列和中序遍历序列分别存于两个一维数组A[1...n]和 Bfl...n]中,试编写算法建立该二叉树的二叉链表。
题目描述:设一棵二叉树中各结点的值互不相同,其先序遍历序列和中序遍历序列分别存于两个一维数组A[1…n]和 B[1…n]中,试编写算法建立该二叉树的二叉链表。 分析: 对于一颗二叉树,知道其中序和先序序列就可以完全确定…...
什么是Daily Scrum?
Daily Scrum(每日站会),Scrum Master要确保这个会在每天都会开。这个会的目的就是检查正在做的东西和方式是否有利于完成Sprint目的,并及时做出必要的调整。 每日站会一般只开15分钟,为了让事情更简单些,这…...
逆波兰表达式求值[中等]
优质博文:IT-BLOG-CN 一、题目 给你一个字符串数组tokens,表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。 有效的算符为 ‘’、‘-’、‘*’ 和 ‘/’ 。 每个操作数(运算对象)都…...
Oracle连接和使用
5. Oracle连接和使用 5.1. sqlplus sqlplus作为甲骨文公司提供的一款本族工具产品,有着悠久的历史和积淀,它几乎伴随着Oracle数据库产生至今的整个生命周期,而且,还会继续和Oracle数据库产品相伴一直发展下去。该工具看似简单灵活的背后,却为广大用户使用Oracle数据库提…...
redis单线程为什么这么快
redis单线程为什么这么快 redis是使用的单线程来进行操作的,因为所有的数据都是在内存中的,内存操作特别快。而且单线程避免了多线程切换性能损耗问题 单线程如何处理并发客户端连接? redis利用epoll来实现IO多路复用,将连接信息和…...
工业机器视觉megauging(向光有光)使用说明书(五,轻量级的visionpro)
这个说明主要介绍抓线功能。 第一步,添加线工具,鼠标双击工具箱“抓线”,出现如下界面: 第二步,我们拉一条,“九点标定”到“抓线1”的线,和visionpro操作一样: 第三步,…...
【LittleXi】2023年广东工业大学腾讯杯新生程序设计竞赛
文章目录 【LittleXi】2023年广东工业大学腾讯杯新生程序设计竞赛A.星期几考试?C.信件D、乘除法E、不知道叫什么名字F.我要学会盾反!G.闪闪发光心动不已!H.不想想背景的gcdI.uu爱玩飞行棋J.火柴人小游戏K .有趣的BOSS 【LittleXi】2023年广东…...
【C语言:数据在内存中的存储】
文章目录 1.整数在内存中的存储1.1整数在内存中的存储1.2整型提升 2.大小端字节序2.1什么是大小端2.2为什么有大小端之分 3.整数在内存中的存储相关题目题目一题目二题目三题目四题目五题目六题目七 4.浮点数在内存中的存储4.1浮点数存的过程4.2浮点数取得过程 在这之前呢&…...
每日一练:阿姆斯特朗数
如果一个 n 位正整数等于其各位数字的 n 次方之和,则称该数为阿姆斯特朗数。 例如 1^3 5^3 3^3 153。 1000 以内的阿姆斯特朗数: 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407。...
fatal: remote error: upload-pack: not our ref (未解决问题)
PX4使用 git submodule update --init --recursive报错 fatal: remote error: upload-pack: not our ref解决办法参考:https://stackoverflow.com/questions/61163082/why-does-git-submodule-update-fail-with-fatal-remote-error-upload-pack-not-o 感觉就是清…...
Python 3 使用 read()、readline()、readlines() 函数 读取文件
1 样例文件 example.txt 春晓 孟浩然〔唐代〕 春眠不觉晓,处处闻啼鸟。 夜来风雨声,花落知多少。 2 分别使用 read()、readline()、readlines() 函数 2.1 # read() -------- 一次性读取所有文本,以字符串的形式返回结果。 # read() ----…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...
