Azure Machine Learning - 创建Azure AI搜索索引
目录
- 一、先决条件
- 检查空间
- 二、创建和加载索引
- 启动向导
- 连接到 数据源
- 跳过认知技能配置
- 配置索引
- 配置索引器
- 三、监视索引器进度
- 四、检查搜索索引结果
- 五、添加或更改字段
- 六、使用搜索浏览器查询
- 七、运行更多示例查询
- 八、清理资源
在本文中,你将使用导入数据向导和由虚拟酒店数据构成的一个内置示例数据源来创建你的首个搜索索引。 此向导将指导你完成创建搜索索引的过程,帮助你在几分钟内编写有趣的查询。
关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。
一、先决条件
-
具有活动订阅的 Azure 帐户。 免费创建帐户。
-
适用于任何层和任何区域的 Azure AI 搜索服务。 创建服务或在当前订阅下查找现有服务(https://portal.azure.com/#blade/HubsExtension/BrowseResourceBlade/resourceType/Microsoft.Search%2FsearchServices)。
检查空间
很多用户开始使用免费服务。 免费层限制为三个索引、三个数据源和三个索引器。 在开始之前,请确保有空间存储额外的项目。 本快速入门将为每个对象创建一个。
请查看服务的“概述”页,了解你已有多少索引、索引器和数据源。
二、创建和加载索引
Azure AI 搜索通过“导入数据”向导使用索引器。 hotels-sample 数据集托管在 Microsoft 的 Azure Cosmos DB 上,并通过内部连接进行访问。 不需要自己的 Azure Cosmos DB 帐户或源文件即可访问数据。
启动向导
若要开始,请在 Azure 门户中浏览到 Azure AI 搜索服务,然后打开“导入数据”向导。
-
使用 Azure 帐户登录到 Azure 门户,然后转到 Azure AI 搜索服务。
-
在“概述”页,选择“导入数据”以创建和填充搜索索引。
此时会打开“导入数据”向导。
连接到 数据源
下一步是连接到要用于搜索索引的数据源。
-
在“导入数据”向导的“连接到数据”选项卡上,展开“数据源”下拉列表,然后选择“示例”。
-
在内置示例列表中,选择“hotels-sample”。
在本快速入门中,你将使用内置数据源。 如果要创建自己的数据源,则需要指定名称、类型和连接信息。 创建数据源后,可以在其他导入操作中重复使用该数据源。
- 选择“下一步: 添加认知技能(可选)”继续操作。
跳过认知技能配置
“导入数据”向导支持创建 AI 扩充管道,用于将 Azure AI 服务算法合并到索引编制中。 有关详细信息,请参阅 Azure AI 搜索中的 AI 扩充。
-
在本快速入门中,请忽略“添加认知技能”选项卡上的 AI 扩充配置选项。
-
选择“跳到: 自定义目标索引”以继续操作。
配置索引
Azure AI 搜索服务为内置的 hotels-sample 索引生成架构。 针对 hotels-sample 索引的文档和示例中的查询将会根据此索引定义运行(高级筛选器示例除外)。 定义显示在“导入数据”向导的“自定义目标索引”选项卡上:
通常,在基于代码的练习中,创建索引是在加载数据之前完成的。 “导入数据”向导会通过为任何它可以抓取的数据源生成基本索引来精简这些步骤。
索引至少需要“索引名称”和“字段”集合。 一个字段必须标记为文档键,用于唯一标识每个文档。 索引键提供唯一的文档标识符。 该值始终为字符串。 如果需要自动完成或建议查询,可以指定语言分析器或建议器。
每个字段都有一个名称、数据类型和属性,用于控制如何在搜索索引中使用字段。 “自定义目标索引”选项卡使用复选框为所有字段或特定字段启用或禁用以下属性:
- 可检索:在搜索索引中包含字段内容。
- 可筛选:允许将字段内容用作搜索索引的筛选条件。
- 可排序:使字段内容可用于对搜索索引进行排序。
- 可分面:将字段内容用于分面导航结构。
- 可搜索:在全文搜索中包含字段内容。 字符串可搜索。 数值字段和布尔字段通常标记为不可搜索。
由于属性选择,索引的存储要求可能会有所不同。 例如,启用字段的“可筛选”属性需要更多存储空间,但启用字段的“可检索”属性则不需要。
默认情况下,“导入数据”向导会在数据源中扫描用作“键”字段基础的唯一标识符。 字符串经过属性化,可检索且可搜索。 整数归属为可检索、可筛选、可排序和可分面。
请按照以下步骤来配置索引:
-
对于“索引名称”(hotels-sample-index) 和“键”字段 (HotelId),接受系统生成的值。
-
对于所有字段属性,接受系统生成的值。
-
选择“下一步: 创建索引器”以继续操作。
配置索引器
最后一步是为搜索索引配置索引器。 此对象定义一个可执行过程。 可以将索引器配置为定期运行。
-
对于“索引器名称”(hotels-sample-indexer),接受系统生成的值。
-
在本快速入门中,请使用默认选项立即运行索引器一次。
-
选择“提交”以创建并同时运行索引器。
三、监视索引器进度
完成“导入数据”向导后,可以监视索引器或索引的创建。 服务“概述”页提供了指向 Azure AI 搜索服务中创建的资源的链接。
-
在 Azure 门户中,转到 Azure AI 搜索服务的“概述”页。
-
选择“使用情况”查看服务资源的摘要详细信息。
-
在“索引器”框中,选择“查看索引器”。
在 Azure 门户中更新页面结果可能需要几分钟时间。 此时会在列表中看到新创建的索引器,其状态为“正在进行”或“成功”。 该列表还显示已编制索引的文档数。
四、检查搜索索引结果
在服务的“概述”页上,可以对索引创建执行类似的检查。
-
在“索引”框中,选择“查看索引”。
等待 Azure 门户页刷新。 页面上应该会显示索引以及对应的文档计数和存储大小。
-
若要查看新索引的架构,请选择索引名称“hotels-sample-index”。
-
在“hotels-sample-index”页上,选择“字段”选项卡以查看索引架构。
如果要编写查询,并且需要检查字段是“可筛选”还是“可排序”,请使用此选项卡查看属性设置。
五、添加或更改字段
在“字段”选项卡上,可以使用“添加字段”选项为架构定义创建新字段。 指定字段名称、数据类型和属性设置。
虽然始终可以创建新字段,但在大多数情况下,无法更改现有字段。 现有字段在搜索服务中具有实际的表示形式,因此是不可修改的,即使在代码中也是如此。 若要从根本上更改现有字段,你需要创建新索引,以替换掉原始索引。 随时可以添加其他构造,例如评分配置文件和 CORS 选项。
若要清楚地了解在索引设计过程中可以和不可以编辑哪些内容,请花点时间查看索引定义选项。 字段列表中变灰的选项指示这些值无法修改或删除。
六、使用搜索浏览器查询
现在,你有一个搜索索引,可以使用 Azure AI 搜索中的搜索资源管理器工具查询该索引。 搜索浏览器会发送符合搜索文档 REST API的 REST 调用。 该工具支持简单查询语法和完整的 Lucene 查询语法。
可以从索引页上的“搜索资源管理器”选项卡和服务的“概述”页访问该工具。
- 在 Azure 门户中,转到 Azure AI 搜索服务的“概述”页,然后选择“搜索资源管理器”。
-
在“索引”下拉列表中,选择新索引“hotels-sample-index”。
“请求 URL”框将更新,以显示具有所选索引和 API 版本的链接目标。
-
在“查询字符串”框中,输入查询字符串。
在本快速入门中,可以从[运行更多示例查询]部分提供的示例中选择查询字符串。 以下示例使用的查询为
search=beach &$filter=Rating gt 4
。
若要更改查询语法的表示形式,请使用“视图”下拉菜单在“查询视图”和“JSON 视图”之间切换。
-
选择“搜索”以运行查询。
“结果”框将更新以显示查询结果。 如果结果较长,请对“结果”框使用“缩略图”以快速跳转到输出的不可见区域。
七、运行更多示例查询
下表中的查询旨在使用搜索资源管理器搜索 hotels-sample 索引。 结果以详细的 JSON 文档形式返回。 索引中标记为“可检索”的所有字段都可能出现在结果中。
查询语法 | 查询类型 | 说明 | 结果 |
---|---|---|---|
search=spa | 全文查询 | search= 参数搜索特定关键字。 | 该查询在文档的任何可搜索字段中查找包含关键字 spa 的酒店数据。 |
search=beach &$filter=Rating gt 4 | 筛选的查询 | filter 参数根据提供的条件进行筛选。 | 该查询查找评分大于 4 的海滩酒店。 |
search=spa &$select=HotelName,Description,Tags &$count=true &$top=10 | 参数化查询 | & 符号用于追加可以按任意顺序指定的搜索参数。 | |
- $select 参数返回一小组字段,以获得比较简洁的搜索结果。 | |||
- $count=true 参数返回所有与查询匹配的文档的总计数。 | |||
- $top 参数按排名由高到低返回所有文档中指定数量的文档。 | 该查询查找前 10 家 spa 酒店,并显示其名称、说明和标记。 | ||
默认情况下,Azure AI 搜索返回前 50 个最佳匹配项。 可以使用此参数来增加或减少数量。 |
|
| search=* &facet=Category &$top=2
| 对字符串值进行分面查询 | facet
参数返回与指定字段匹配的文档的聚合计数。
- 指定字段必须在索引中标记为“可分面”。
- 在空搜索或未限定的搜索中,表示所有文档。 | 该查询查找 Category
字段的聚合计数,并显示前 2 个。 |
| search=spa &facet=Rating
| 对数值进行分面查询 | facet
参数返回与指定字段匹配的文档的聚合计数。
- 虽然字段 Rating
是数值,但它可以指定为分面,因为它在索引中标记为“可检索”、“可筛选”和“可分面”。 | 查询查找 Rating
字段数据的 spa 酒店。 Rating
字段具有数值 1 到 5,适合按每个值对结果进行组。 |
| search=beach &highlight=Description &$select=HotelName, Description, Category, Tags
| 突出显示 | highlight
参数将突出显示应用于文档数据中指定关键字的匹配实例。 | 该查询查找并突出显示 Description
字段中关键字 beach
的实例,并显示相应的酒店名称、说明、类别和标记。 |
| 原始:search=seatle
调整后:search=seatle~ &queryType=full
| 模糊搜索 | 默认情况下,执行典型搜索时,如果拼错查询字词(例如,将 seatle
错拼为 Seattle
),则无法返回匹配项。 queryType=full
参数调用支持波形符 ~
操作数的完整 Lucene 查询分析程序。 如果存在这些参数,则查询对指定的关键字执行模糊搜索。 该查询将查找匹配的结果以及与关键字相似但不完全匹配的结果。 | 原始查询不返回任何结果,因为关键字 seatle
拼写错误。
调整后的查询调用完整的 Lucene 查询分析程序以匹配术语 seatle~
的实例。
|
| $filter=geo.distance(Location, geography'POINT(-122.12 47.67)') le 5 &search=* &$select=HotelName, Address/City, Address/StateProvince &$count=true
| 地理空间搜索 | $filter=geo.distance
参数根据指定的 Location
和 geography'POINT
坐标筛选位置数据的所有结果。 | 该查询查找位于纬度经度坐标 -122.12 47.67
(即“美国华盛顿州雷德蒙德”)5 公里范围内的酒店。该查询显示匹配项的总数 &$count=true
以及酒店名称和地址位置。 |
请花一点时间尝试对索引使用上面的一些示例查询。
八、清理资源
在自己的订阅中操作时,最好在项目结束时确定是否仍需要已创建的资源。 持续运行资源可能会产生费用。 可以逐个删除资源,也可以删除资源组以删除整个资源集。
可以在 Azure 门户左侧窗格的“所有资源”或“资源组”下查找和管理服务的资源。
如果使用的是免费服务,请记住限制为三个索引、索引器和数据源。 可以在 Azure 门户中删除单个项目,以不超出此限制。
关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。