你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在 Azure 认知搜索中创建索引
在 Azure 认知搜索中,查询请求面向搜索索引中的可搜索文本。
在本文中,了解定义和发布搜索索引的步骤。 创建索引会在搜索服务上建立物理数据结构(文件夹和文件)。 索引定义存在后,加载索引会作为一项单独的任务进行。
先决条件
针对搜索服务的写入权限。 可通过请求上的管理 API 密钥来授予权限。 如果你加入了基于角色的访问控制公共预览版,也可以搜索参与者角色的成员身份发出请求。
提供要索引的内容的外部数据源。 应引用数据源来了解搜索索引的架构要求。 索引创建主要是架构定义练习。 在创建索引之前,你应该满足以下条件:
稳定的索引位置。 目前不支持将现有索引移动到其他搜索服务。 回顾应用程序要求,并确保现有的搜索服务、服务容量和位置足以满足你的需求。
最后,所有服务层对可创建的对象数量都有索引限制。 例如,如果要试用免费层,则你在任何时候都只能有 3 个索引。 在索引本身中,复杂字段和集合的数量是有限制的。
文档键
搜索索引有一个必填字段:文档键。 文档键是搜索文档的唯一标识符。 在 Azure 认知搜索中,它必须是一个字符串,并且必须来自提供要索引的内容的数据源中的唯一值。 搜索服务不生成键值,但是在某些情况下(例如 Azure 表索引器),它将合成现有值,来为要索引的文档创建一个唯一键。
增量索引是指只索引新内容和更新后的内容,在该索引期间,会添加包含新键的传入文档,同时合并或覆盖包含现有键的传入文档,具体取决于索引字段是 Null 还是已填充。
架构清单
使用此清单来帮助针对搜索索引做出设计决策。
查看命名约定,以便索引和字段名称符合命名规则。
查看受支持的数据类型。 数据类型将影响字段的使用方式。 例如,数值内容是可筛选的,但不是全文可搜索的。 最常见的数据类型是用于可搜索文本的
Edm.String
,它使用全文搜索引擎进行标记和查询。标识文档键。 文档键是索引要求。 它是单个字符串字段,将使用包含唯一值的源数据字段对其进行填充。 例如,如果从 Blob 存储进行索引,则元数据存储路径通常用作文档键,因为它唯一标识容器中的每个 blob。
确定数据源中将在索引中提供可搜索内容的字段。 可搜索内容包括使用全文搜索引擎查询的短字符串或长字符串。 如果内容十分冗长(少量短语或长段内容),请试用不同的分析器来查看文本是如何被标记的。
字段属性分配将决定搜索行为和索引在搜索服务上的物理表示形式。 对于许多客户来说,确定应如何指定字段是一个迭代过程。 若要加快迭代速度,请从示例数据开始,这样就可以轻松删除和重新生成索引。
确定哪些源字段可用作筛选器。 数值内容和短文本字段(尤其是那些具有重复值的字段)是不错的选择。 使用筛选器时,请记住:
可以选择在分面导航中使用可筛选字段。
可筛选字段以任意顺序返回,因此请考虑对其进行排序。
确实你将使用默认分析器 (
"analyzer": null
) 还是其他分析器。 分析器用于在索引和执行查询期间标记文本字段。 如果字符串具有描述性且语义丰富,或者你具有已翻译的字符串,请考虑使用语言分析器覆盖默认值。
注意
全文搜索是通过索引期间标记的字词进行的。 如果查询无法返回预期的结果,请测试词汇切分以验证字符串是否确实存在。 可以对字符串尝试不同的分析器,以了解如何为各种分析器生成令牌。
创建索引
准备好创建索引时,请使用可发送请求的搜索客户端。 可使用 Azure 门户或 REST API 进行早期开发和概念证明测试。
在开发过程中,规划频繁的重新生成。 由于物理结构是在服务中创建的,因此许多修改都需要删除和重新创建索引。 可以考虑使用一部分数据来加快重新生成的速度。
通过门户设计的索引可强制实施针对特定数据类型的要求和架构规则,例如,对数值字段禁用全文搜索功能。
在搜索服务概述页面中,选择以下任一选项来创建搜索索引:
- “添加索引”是一种嵌入式编辑器,用于指定索引架构
- 导入数据向导
该向导是一个端到端工作流,用于创建索引器、数据源和已完成的索引。 它还会加载数据。 如果它对你来说大材小用,请改用“添加索引”。
以下屏幕截图突出显示了“添加索引”和“导入数据”在命令栏上的具体位置。 创建索引后,可以在“索引”选项卡中再次找到它。
提示
在门户中创建索引后,可以复制 JSON 表示形式并将其添加到应用程序代码中。
为跨源查询设置 corsOptions
索引架构包含用于设置 corsOptions
的部分。 默认情况下,客户端 JavaScript 无法调用任何 API,因为浏览器将阻止所有跨域请求。 若要允许对索引进行跨域查询,请通过设置 corsOptions 来启用 CORS(跨域资源共享)。 出于安全原因,只有查询 API 才支持 CORS。
"corsOptions": {
"allowedOrigins": [
"*"
],
"maxAgeInSeconds": 300
可为 CORS 设置以下属性:
allowedOrigins(必需):这是会被授予索引访问权限的来源的列表。 这意味着,将允许从这些来源提供的任何 JavaScript 代码查询索引(假设它提供正确的 api-key)。 每个来源通常采用
protocol://<fully-qualified-domain-name>:<port>
格式,不过往往会省略<port>
。 有关更多详细信息,请参阅跨域资源共享 (Wikipedia)。若要允许访问所有来源,请将
*
作为单个项目包含在 allowedOrigins 数组中。 不建议对生产搜索服务采用这种做法,但它在开发和调试中却很有用。maxAgeInSeconds(可选):浏览器使用此值确定缓存 CORS 预检响应的持续时间(以秒为单位)。 此值必须是非负整数。 此值越大,性能越好,但 CORS 策略更改生效所需的时间也越长。 如果未设置此值,将使用 5 分钟的默认持续时间。
允许更新现有索引
创建索引会在搜索服务上创建物理数据结构(文件和倒排索引)。 创建索引后,使用更新索引进行更改的能力取决于该修改是否会使这些物理结构无效。 在索引中创建了字段后,大多数字段属性就无法更改。
或者,可以创建索引别名,该别名用作应用程序代码中的稳定引用。 可以不更新代码,而是将索引别名更新为指向较新的索引版本。
为了最大限度地减少设计过程中的流失,下表描述了架构中哪些元素是固定的以及哪些元素是灵活的。 更改固定元素需要重新生成索引,而灵活元素可以在不影响物理实现的情况下随时更改。
元素 | 是否可以进行更新? |
---|---|
名称 | 否 |
密钥 | 否 |
字段名称和类型 | 否 |
字段属性(可搜索、可筛选、可查找、可排序) | 否 |
字段属性(可检索) | 是 |
Analyzer | 可以在索引中添加和修改自定义分析器。 关于字符串字段的分析器分配,只能修改“searchAnalyzer”。 所有其他分配和修改都需要重新生成。 |
为配置文件评分 | 是 |
建议器 | 否 |
跨域远程脚本 (CORS) | 是 |
加密 | 是 |
后续步骤
通过以下链接熟悉如何使用数据加载索引或使用同义词映射扩展索引。