Azure Machine Learning - Azure AI 搜索中的索引器

在 Azure AI 搜索中,搜索索引是可搜索的内容,可供搜索引擎用于索引编制、全文搜索和筛选后查询。 索引由架构定义并保存到搜索服务中,第二步是数据导入。 除了在主数据存储中,此内容也存在于搜索服务中,这是在新式应用程序中实现预期的毫秒级响应时间所必需的。 除了特定的索引场景,搜索服务永远不会连接到本地数据或对其进行查询。

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

file

搜索索引的内容

在 Azure AI 搜索中,索引包含搜索文档。 从概念上讲,文档是索引中的一个可搜索数据单元。 例如,零售商可能为每件商品都创建了文档,新闻机构可能为每篇报道都创建了文档,旅游网站可能为每家酒店和每个目的地都创建了文档。 将这些概念对应到更为熟悉的数据库等效对象:搜索索引等同于表,文档大致相当于表中的行 。

文档的结构由索引架构确定,如下所示。 通常,索引中大部分都是“字段”集合,其中每个字段都已命名、分配了[数据类型],并具有允许行为的属性(确定该字段的用法)。

{"name": "name_of_index, unique across the service","fields": [{"name": "name_of_field","type": "Edm.String | Collection(Edm.String) | Edm.Int32 | Edm.Int64 | Edm.Double | Edm.Boolean | Edm.DateTimeOffset | Edm.GeographyPoint","searchable": true (default where applicable) | false (only Edm.String and Collection(Edm.String) fields can be searchable),"filterable": true (default) | false,"sortable": true (default where applicable) | false (Collection(Edm.String) fields cannot be sortable),"facetable": true (default where applicable) | false (Edm.GeographyPoint fields cannot be facetable),"key": true | false (default, only Edm.String fields can be keys),"retrievable": true (default) | false,"analyzer": "name_of_analyzer_for_search_and_indexing", (only if 'searchAnalyzer' and 'indexAnalyzer' are not set)"searchAnalyzer": "name_of_search_analyzer", (only if 'indexAnalyzer' is set and 'analyzer' is not set)"indexAnalyzer": "name_of_indexing_analyzer", (only if 'searchAnalyzer' is set and 'analyzer' is not set)"synonymMaps": [ "name_of_synonym_map" ] (optional, only one synonym map per field is currently supported)}],"suggesters": [ ],"scoringProfiles": [ ],"analyzers":(optional)[ ... ],"charFilters":(optional)[ ... ],"tokenizers":(optional)[ ... ],"tokenFilters":(optional)[ ... ],"defaultScoringProfile": (optional) "...","corsOptions": (optional) { },"encryptionKey":(optional){ }}
}

字段定义

[创建索引请求]主体中的“fields”集合定义了一个搜索文档。 你需要用于文档标识、存储可搜索文本的字段(键),以及用于支持筛选器、各个方面和排序的字段。 你可能还需要为某个用户永远看不到的数据设置字段。 例如,你可能希望设置用于修改搜索排名的利润率或市场促销活动的字段。

如果传入的数据在本质上已分层,就可在索引中将其表示为[复杂类型],用于表示嵌套结构。 内置的示例数据集 Hotels 演示的复杂类型使用一个 Address(包含多个子字段),其中有与每个酒店的一对一关系,并且有一个 Rooms 复杂集合,其中有多个房间与每个酒店相关联。

字段属性

字段属性决定了字段的使用方式,例如,是否用于全文搜索、分面导航和排序等操作中。

字符串字段通常标记为“searchable”和“retrievable”。 用来缩小搜索结果范围的字段包括“sortable”、“filterable”和“facetable”。

Attribute描述
“searchable”可全文搜索,在编制索引期间遵从语法分析,例如分词。 如果将某个可搜索字段设置为“sunny day”之类的值,在内部它将拆分为单独的标记“sunny”和“day”。 有关详细信息,请参阅[全文搜索工作原理]。
“filterable” f i l t e r 查询中引用。 ‘ E d m . S t r i n g ‘ 或 ‘ C o l l e c t i o n ( E d m . S t r i n g ) ‘ 类型的可筛选字段不进行分词,因此,比较仅用于查找完全匹配项。例如,如果将此类字段 f 设置为“ s u n n y d a y ”,则 ‘ filter 查询中引用。 `Edm.String` 或 `Collection(Edm.String)` 类型的可筛选字段不进行分词,因此,比较仅用于查找完全匹配项。 例如,如果将此类字段 f 设置为“sunny day”,则 ` filter查询中引用。Edm.StringCollection(Edm.String)类型的可筛选字段不进行分词,因此,比较仅用于查找完全匹配项。例如,如果将此类字段f设置为sunnyday,则filter=f eq 'sunny’找不到任何匹配项,但$filter=f eq ‘sunny day’` 可找到。
“sortable”默认情况下,系统按分数对结果进行排序,但可以配置基于文档中字段的排序。 Collection(Edm.String) 类型的字段不能为“sortable”。
“facetable”通常用于包括了按类别(例如特定城市中的宾馆)的命中次数的搜索结果呈现中。 此选项无法与 Edm.GeographyPoint 类型的字段一起使用。 Edm.String 类型的字段为可筛选,“sortable”或“facetable”字段的长度最多可以是 32 千字节。 有关详细信息,请参阅[创建索引 (REST API)]。
“key”文档在索引内的唯一标识符。 必须仅选择单个字段作为键字段,并且它必须是 Edm.String 类型的。
“retrievable”决定了是否可以在搜索结果中返回此字段。 当希望将某个字段(例如_利润_)用作筛选器、排序或评分机制,但不希望该字段显示给最终用户时,这很有用。 对于 key 字段,此属性必须为 true

尽管可以随时添加新字段,但在索引的生存期内现有字段定义将被锁定。 因此,开发人员通常使用门户创建简单索引、测试创意,或者使用门户页面来查找设置。 如果采用基于代码的方式以便可以轻松重新生成索引,那么对索引进行频繁迭代的设计就更为高效。

备注

用于生成索引的 API 具有不同的默认行为。 对于 [REST API],大多数属性在默认情况下处于启用状态(例如,“searchable”和“retrievable”对于字符串字段为 true),并且通常只需要在要关闭它们时设置它们。 对于 .NET SDK,情况恰恰相反。 对于未显式设置的任何属性,默认情况下禁用相应的搜索行为,除非你特别启用它。

物理结构和大小

在 Azure AI 搜索中,索引的物理结构主要是内部实现。 你可以访问其架构、查询其内容、监视其大小并管理容量,但群集本身(索引、分片以及其他文件和文件夹)是由 Microsoft 在内部管理。

可在 Azure 门户的“索引”选项卡中监视索引大小,针对搜索服务发出 [GET INDEX 请求]也可实现此目的。 还可以发出[服务统计信息请求]并检查存储大小的值。

索引的大小由以下内容决定:

  • 文档的数量和组合
  • 单个字段的属性
  • 索引配置(具体来说,是否包含建议器)

文档的撰写和数量将由你选择导入的内容决定。 请记住,搜索索引应该只包含可搜索的内容。 如果源数据包含二进制字段,则忽略这些字段(除非使用 AI 扩充功能来破解和分析内容,以创建文本可搜索信息)。

字段属性可确定行为。 为了支持这些行为,索引过程将创建必要的数据结构。 例如,“可搜索”属性将调用[全文搜索],从而扫描切分后的字词的反转索引。 相比之下,“可筛选”或“可排序”属性将支持对未修改的字符串进行迭代。 下一节中的示例显示了基于所选属性的索引大小的变化。

[建议器]是支持预先输入或自动完成查询的构造。 因此,在包含建议器时,索引过程将创建逐字字符匹配所需的数据结构。 建议器是在字段级别实现的,因此请仅选择对预先输入而言合理的字段。

演示属性和建议器的存储意义的示例

以下屏幕截图演示了各种属性组合产生的索引存储模式。 该索引基于“房地产示例索引”,你可使用“导入数据”向导和内置的示例数据轻松创建该索引。 尽管未显示索引架构,但可以基于索引名称推断属性。 例如,只选择了 realestate-searchable 索引中的“searchable”属性,只选择了 realestate-retrievable 索引中的“retrievable”属性,等等 。

file

尽管这些索引变体是伪造的,但我们可以参考这些变体来对属性影响存储的方式进行大致比较:

  • “可检索”不影响索引大小。
  • “可筛选”、“可排序”、“可具面化”使用更多存储。
  • 建议器极可能增加索引大小,但并不会像屏幕截图所示那么大(所有能感知建议器的字段都被选中,大多数索引中不太可能出现这种情况)。

未在上表中反映出的还有分析器的影响。 如果使用 edgeNgram 分词器来存储逐字字符序列 (a, ab, abc, abcd),则索引大小将大于使用标准分析器时的大小。

基本操作和交互

现在,你已对索引有了更好的了解,本部分接下来将介绍索引运行时操作,包括连接到单个索引并保护其安全。

备注

管理索引时,请注意,没有用于移动或复制索引的门户或 API 支持。 相反,客户通常将其应用程序部署解决方案指向不同的搜索服务(如果使用相同的索引名称),或者修改名称以在当前的搜索服务上创建副本,然后再生成它。

索引隔离

在 Azure AI 搜索中,将一次处理一个索引,其中与索引相关的所有操作都面向单个索引。 无论是编制索引还是查询,都不存在“相关索引”的概念或独立索引的联接。

持续可用

索引在第一个文档编制索引后可立即用于查询,但在所有文档编制索引后才能完全运行。 在内部,搜索索引[跨分区分布,并针对副本执行]。 物理索引在内部管理。 逻辑索引由你管理。

索引将持续可用,无法暂停或脱机。 由于它专为连续操作而设计,因此针对其内容的任何更新或向索引本身添加内容的操作都实时发生。 因此,如果请求与文档更新一致,查询可能会暂时返回不完整的结果。

注意,对于文档操作(刷新或删除)和不影响现有结构或当前索引完整性的修改(例如添加新的字段),存在查询连续性。 如需更新结构(更改现有字段),通常可在开发环境中使用“丢弃并重新生成”工作流进行管理,也可在生产服务上创建新版索引。

为了避免[索引重新生成],一些只进行细小改动的客户会选择创建与以前版本共存的新字段,以对字段进行“版本控制”。 随着时间的推移,这会导致出现孤立内容(采用过时字段或过时的自定义分析器定义形式),特别是在复制成本很高的生产索引中。 可在索引生命周期管理过程中,通过计划更新中处理这些问题。

终结点连接和安全性

所有索引和查询请求都以索引为目标。 终结点通常是以下其中一项:

终结点连接和访问控制
<your-service>.search.windows.net/indexes以索引集合为目标。 在创建、列出或删除索引时使用。 这些操作需要管理员权限,通过管理员 [API 密钥]或[搜索参与者角色]可获得该权限。
<your-service>.search.windows.net/indexes/<your-index>/docs以单个索引的文档集合为目标。 在查询索引或数据刷新时使用。 对于查询,读取权限就已足够,通过查询 API 密钥或“数据读取者”角色可获得该权限。 对于数据刷新,需要管理员权限。

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

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

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

相关文章

由11月27日滴滴崩溃到近两个月国内互联网产品接二连三崩溃引发的感想

文章目录 知乎文分析微信聊天截图微信公众号 滴滴技术 发文k8s 官方文档滴滴官方微博账号 近两个月国内互联网产品“崩溃”事件2023-10-23 语雀崩溃2023-11-12 阿里云崩溃2023-11-27 滴滴崩溃2023-12-03 腾讯视频崩溃总结 我的感想 知乎文分析 最近连续加班&#xff0c;打车较…

todesk连接ubuntu显示当前系统并无桌面环境,或无显示器,无法显示远程桌面,您需要自行安装X11桌面环境,或者使用终端文件功能

ToDesk远程遇到的问题如上图&#xff0c;换向日葵直接黑屏&#xff1b; 问题原因 截止发文时间&#xff0c;Todesk只支持X11协议&#xff0c;没有适配最新的Wayland协议&#xff0c;所以我们需要把窗口系统调整为X11才可以。 解决方法 修改配置文件&#xff0c;关闭wayland su…

【模电】基本共射放大电路的工作原理及波形分析

基本共射放大电路的工作原理及波形分析 在上图所示的基本放大电路中&#xff0c;静态时的 I B Q I\tiny BQ IBQ、 I C Q I\tiny CQ ICQ、 U C E Q U\tiny CEQ UCEQ如下图( b )、( c )中虚线所标注。 &#xff08; a &#xff09; u i 的波形&#xff08; b &#xff09; i B …

LeetCode:1038. 从二叉搜索树到更大和树(反向中序遍历 C++、Java)

目录 1038. 从二叉搜索树到更大和树 题目描述&#xff1a; 实现代码与解析&#xff1a; dfs 原理思路&#xff1a; 1038. 从二叉搜索树到更大和树 题目描述&#xff1a; 给定一个二叉搜索树 root (BST)&#xff0c;请将它的每个节点的值替换成树中大于或者等于该节点值的所…

JDK8新特性——Stream流

文章目录 一、Stream流体验二、Stream流的创建三、Stream流中间方法四、Stream流终究方法 Stream流&#xff08;也叫Stream API&#xff09;。它是从JDK8以后才有的一个新特性&#xff0c;是专业用于对集合或者数组进行便捷操作的 一、Stream流体验 需求&#xff1a;有一个Lis…

linux远程桌面管理工具(xrdp)、向日葵

Windows远程桌面 linux远程桌面 使用向日葵远程桌面&#xff08;手机端同理&#xff09; Windows远程桌面 微软自带Remote Desktop Connection Manager &#xff08;RDCMan&#xff09;远程控制管理软件介绍 远程桌面连接管理器 v2.93 linux远程桌面 Windows远程桌面Ubunt…

JVM 运行时内存(三)

Java 堆从 GC 的角度还可以细分为: 新生代(Eden 区、From Survivor 区和 To Survivor 区)和老年代。 1. 新生代 是用来存放新生的对象。一般占据堆的 1/3 空间。由于频繁创建对象&#xff0c;所以新生代会频繁触发MinorGC 进行垃圾回收。新生代又分为 Eden 区、ServivorFrom、…

Android Framework 电池提醒相关Dialog熄屏消失的问题

记录一下花了三四天干一天就能完成的需求的傻事。 说在前头&#xff0c;这篇文章记录了电池提醒dialog相关&#xff0c;弹出dialog且熄屏再亮屏dialog不会消失的代码&#xff0c;这篇废话比较多&#xff0c;看正常代码直接跳到代码3。 故事背景 需求要求添加非法电池的弹窗&a…

[多线程]阻塞队列和生产者消费者模型

目录 1.阻塞队列 1.1引言 1.2Java标准库中的阻塞队列 1.3自主通过Java代码实现一个阻塞队列(泛型实现) 2.生产者消费者模型 1.阻塞队列 1.1引言 阻塞队列是多线程部分一个重要的概念,它相比于一般队列,有两个特点: 1.线程是安全的 2.带有阻塞功能 1) 队列为空,出队列就会阻…

语义分割 DeepLab V1网络学习笔记 (附代码)

论文地址&#xff1a;https://arxiv.org/abs/1412.7062 代码地址&#xff1a;GitHub - TheLegendAli/DeepLab-Context 1.是什么&#xff1f; DeepLab V1是一种基于VGG模型的语义分割模型&#xff0c;它使用了空洞卷积和全连接条件随机&#xff08;CRF&#xff09;来提高分割…

JAVA-作业7-画一个笑脸

要求如题 代码如下&#xff1a; SmileFace01: import java.awt.Color; import java.awt.Graphics;import javax.swing.JPanel;public class SmileFace01 extends JPanel {Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);int width getWidth(…

代码随想录刷题题Day5

刷题的第五天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C / Python Day5 任务 ● 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数 ● 1. 两数之和 1 哈希表理…

MT8390商显广告机主板_MTK联发科安卓主板方案开发

商显广告机采用MediaTek 联发科平台主板方案。安卓主板具有更高的性能、更丰富的接口、更多的存储空间以及更为便捷的网络连接方式&#xff0c;可以满足更为复杂的开发和应用需求使其应用领域更加多元化&#xff0c;被广泛应用于各行各业。 商显广告机主板基于联发科MT8390八核…

智能AI系统ChatGPT网站系统源码+Midjourney绘画+支持DALL-E3文生图,支持最新GPT-4-Turbo模型

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…

Ubuntu18.04安装Ipopt-3.12.8流程

本文主要介绍在Ubuntu18.04中安装Ipopt库的流程&#xff0c;及过程报错的解决方法&#xff0c;已经有很多关于Ipopt安装的博客&#xff0c;但经过我的测试&#xff0c;很多都失效了&#xff0c;经过探索&#xff0c;找到可流畅的安装Ipopt的方法&#xff0c;总结成本篇博客。 …

使用typescript搭建express

使用typescript搭建express 开始 为这个项目创建一个新的目录&#xff0c;使用下面的命令初始化项目并创建一个包。 NPM init -y初始化后&#xff0c;让我们安装必要的包 npm i express dotenv cors helmet body-parser 在express中配置typescript npm i -D typescript typ…

WordPress批量上传文章和自动发布文章的方法

专业介绍&#xff1a;WordPress批量上传文章技术解析 在现代数字时代&#xff0c;内容创作是网络存在的驱动力之一。对于博客作者、新闻编辑和内容管理员而言&#xff0c;高效地批量上传文章至WordPress平台是提高工作效率的一个关键方面。WordPress作为最受欢迎的内容管理系统…

【C语言】递归详解

目录 1.前言2. 递归的定义3. 递归的限制条件4. 递归举例4.1 求n的阶乘4.1.1 分析和代码实现4.1.2 画图演示 4.2 顺序打印一个整数的每一位4.2.1 分析和代码实现4.2.2 画图推演 4.3 求第n个斐波那契数 5. 递归与迭代5.1 迭代求第n个斐波那契数 1.前言 这次博客内容是与递归有关&…

迪文串口5使用查询方式发送数据

迪文屏串口5寄存器如下 发送数据我采用的不是中断&#xff0c;而是查询发送标志位实现的。 串口5不像串口2一样&#xff08;串口2可以位寻址&#xff0c;串口5不行&#xff09;&#xff0c;所以如果采用查询模式&#xff0c;需要判断寄存器的数据&#xff0c;我的写法比较简单…

Django高级之——Ajax、cookie与session

一 什么是Ajax AJAX&#xff08;Asynchronous Javascript And XML&#xff09;翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互&#xff0c;传输的数据为XML&#xff08;当然&#xff0c;传输的数据不只是XML,现在更多使用json数据&#xf…