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.rhkb.cn/news/208460.html

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

相关文章

【开源威胁情报挖掘1】引言 + 开源威胁情报挖掘框架 + 开源威胁情报采集与识别提取

基于开源信息平台的威胁情报挖掘综述 写在最前面摘要1 引言近年来的一些新型网络安全威胁类型挖掘网络威胁的情报信息威胁情报分类:内、外部威胁情报国内外开源威胁情报挖掘分析工作主要贡献研究范围和方法 2 开源威胁情报挖掘框架1. 开源威胁情报采集与识别2. 开源…

详解SpringAop开发过程中的坑

😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783…

【Cisco Packet Tracer】DHCP/FTP/WEB/DNS实验

本文使用CiscoPacketTracer仿真软件实现了DHCP/FTP/WEB/DNS实验,拓扑中包含2个客户机和3个服务器(DHCP服务器、DNS服务器、FTP/WEB公用一个服务器),客户机的IP地址由DHCP服务器动态分配。 DHCP服务器IP地址:192.168.0…

renpy-renpy对话内容汉化

文章目录 前言思路实现1,提取对话内容2,汉化对话内容文件3,修改gui文件,使得renpy游戏支持中文显示 前言 最近下载了一些renpy视觉小说内容,发现对话都为英文,因此我在想能否提取出这些对话然后汉化后再封装回原文件,将其汉化 当然汉化过程是机器翻译,汉化其他语言同理,大概5分…

Wireshark使用详解

wireshark简介 wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。   wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的内容&#…

自然语言处理 (NLP) 中的组合语义分析

埃弗顿戈梅德(Everton Gomede) 一、介绍 自然语言处理 (NLP) 中的组合语义分析是一个引人入胜且复杂的话题。为了充分理解它,将这个概念分解成它的基本组成部分是至关重要的:组合语义及其在NLP中的应用。组…

Java笔记

md5加密 spring框架我我们提供了一个工具类DigestUtils 调用类中的md5digestAsHes对密码进行加密 但是要将密码转成bytes数组 password DigestUtils.md5DigestAsHex(password.getBytes()); 对象的属性拷贝 BeanUtils.copyProperties(有数据的对象,空对象)&#…

LeetCode算法题解(动态规划)|LeetCode1143. 最长公共子序列、LeetCode1035. 不相交的线、LeetCode53. 最大子数组和

一、LeetCode1143. 最长公共子序列 题目链接:1143. 最长公共子序列 题目描述: 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一…

GitHub----使用记录

一、上传文件到仓库 1、首先新建一个github仓库 然后先记住这一句指令 2、下载git工具 https://git-scm.com/downloads 下载工具安装不用运行 3、使用git工具上传文件并推送 找到你想上传的文件的位置,右击git Bush here git init :初始化这个仓…

canvas基础:绘制贝塞尔曲线

canvas实例应用100 专栏提供canvas的基础知识,高级动画,相关应用扩展等信息。 canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重要的帮助。 文章目录 bez…

Xshell连接VMware虚拟机中的CentOS

Xshell连接VMware虚拟机中的CentOShttps://www.cnblogs.com/niuben/p/13157291.html 步骤: 1. 检查Linux虚拟机的网络连接模式,确保它是NAT模式。(由于只在本机进行连接,所以没有选择桥接模式。当然,桥接模式的配置会…

Python函数的高级用法

Python 的函数是“一等公民”,因此函数本身也是一个对象,函数既可用于赋值,也可用作其他函数的参数,还可作为其他函数的返回值。 使用函数变量 Python 的函数也是一种值:所有函数都是 function 对象,这意…

算法学习系列(三):汉诺塔

目录: 引言一、问题描述二、问题求解三、测试四、附录(所有代码) 引言 这个汉诺塔问题就是一个典型的递归问题,这篇博客也算是上一篇的一个扩展吧,都是递归问题,这个问题太大,而且牵扯到的问题…

第一类瑞利索末菲标量衍射模型的方孔衍射的空间像计算(附python计算代码)

记第一类瑞利索末菲标量衍射模型的方孔衍射的空间像计算(附python计算代码) RS type 1 衍射空间像计算傅里叶变换采样条件实际计算计算要求傅立叶变换法计算直接卷积方法计算代码傅立叶变换方法直接卷积https://zhuanlan.zhihu.com/p/624292239 Goodman, J. W. (2004). Intro…

Linux shell中的函数定义、传参和调用

Linux shell中的函数定义、传参和调用: 函数定义语法: [ function ] functionName [()] { } 示例: #!/bin/bash# get limit if [ $# -eq 1 ] && [ $1 -gt 0 ]; thenlimit$1echo -e "\nINFO: input limit is $limit" e…

智能优化算法应用:基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.狮群算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

string的模拟

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:能手撕模拟string类 > 毒鸡汤:时间…

强化学习(一)——基本概念及DQN

1 基本概念 智能体 agent ,做动作的主体,(大模型中的AI agent) 环境 environment:与智能体交互的对象 状态 state ;当前所处状态,如围棋棋局 动作 action:执行的动作,…

无脑018——win11部署whisper,语音转文字

1.conda创建环境 conda create -n whisper python3.9 conda activate whisper安装pytorch pip install torch1.8.1cu101 torchvision0.9.1cu101 torchaudio0.8.1 -f https://download.pytorch.org/whl/torch_stable.html安装whisper pip install -U openai-whisper2.准备模型…

代码随想录算法训练营第三十四天|62.不同路径,63. 不同路径 II

62. 不同路径 - 力扣(LeetCode) 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” &#…