你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure AI 搜索中创建索引

在 Azure AI 搜索中,查询请求面向搜索索引中的可搜索文本

在本文中,了解定义和发布搜索索引的步骤。 创建索引会在搜索服务上建立物理数据结构。 索引定义存在后,加载索引会作为一项单独的任务进行。

先决条件

  • 写入权限。 可通过请求上的管理 API 密钥来授予权限。 如果你使用基于角色的访问控制,请作为“搜索参与者”角色的成员来发出请求。

  • 了解要编制索引的数据。 创建索引是架构定义练习,因此应清楚地了解要使哪些源字段可供搜索、可检索、可筛选、可分面和可排序(请参阅架构清单以获取指导)。

    还必须在源数据中具有唯一字段,该字段可用作索引中的文档键(或 ID)

  • 稳定的索引位置。 目前不支持将现有索引移到其他搜索服务。 回顾应用程序要求,并确保现有的搜索服务、服务容量和位置足以满足你的需求。

  • 最后,所有服务层对可创建的对象数量都有索引限制。 例如,如果要试用免费层,则你在任何时候都只能有三个索引。 在索引本身中,复杂字段和集合的数量是有限制的。

文档键

搜索索引有一个必填字段:文档键。 文档键是搜索文档的唯一标识符。 在 Azure AI 搜索中,它必须是一个字符串,并且必须来自提供要索引的内容的数据源中的唯一值。 搜索服务不会生成键值,但在某些情况下(例如 Azure 表索引器),它会合成现有值,为要编制索引的文档创建唯一键。

在增量索引编制中(会对新的和更新的内容编制索引),将添加包含新键的传入文档,同时合并或覆盖包含现有键的传入文档,具体取决于索引字段是 Null 还是已填充。

架构清单

使用此清单来帮助针对搜索索引做出设计决策。

  1. 查看命名约定,以便索引和字段名称符合命名规则。

  2. 查看受支持的数据类型。 数据类型会影响字段的使用方式。 例如,数值内容是可筛选的,但不是全文可搜索的。 最常见的数据类型是用于可搜索文本的 Edm.String,它使用全文搜索引擎进行标记和查询。

  3. 标识文档键。 文档键是索引要求。 它是单个字符串字段,它从包含唯一值的源数据字段填充。 例如,如果从 Blob 存储进行索引,则元数据存储路径通常用作文档键,因为它唯一标识容器中的每个 blob。

  4. 标识数据源中参与索引中可搜索内容的字段。 可搜索内容包括使用全文搜索引擎查询的短字符串或长字符串。 如果内容十分冗长(少量短语或长段内容),请试用不同的分析器来查看文本是如何被标记的。

    字段属性分配确定搜索行为和搜索服务上索引的物理表示形式。 对于许多客户来说,确定应如何指定字段是一个迭代过程。 若要加快迭代速度,请从示例数据开始,这样就可以轻松删除和重新生成索引。

  5. 确定哪些源字段可用作筛选器。 数值内容和短文本字段(尤其是那些具有重复值的字段)是不错的选择。 使用筛选器时,请记住:

    • 可以选择在分面导航中使用可筛选字段。

    • 可筛选字段以任意顺序返回,因此请考虑对其进行排序。

  6. 确定是否使用默认分析器 ("analyzer": null) 或其他分析器。 分析器用于在索引和执行查询期间标记文本字段。

    对于多语言字符串,请考虑语言分析器

    对于带连字符的字符串或特殊字符,请考虑专用分析器。 例如,将整个字段内容视为单个令牌的关键字。 此行为可用于邮政编码、ID 和某些产品名称等数据。 有关详细信息,请参阅部分字词搜索和包含特殊字符的模式

注意

全文搜索是通过索引期间标记的字词进行的。 如果查询无法返回预期的结果,请测试词汇切分以验证字符串是否确实存在。 可以对字符串尝试不同的分析器,以了解如何为各种分析器生成令牌。

创建索引

准备好创建索引时,请使用可发送请求的搜索客户端。 可使用 Azure 门户或 REST API 进行早期开发和概念证明测试。

在开发过程中,规划频繁的重新生成。 由于物理结构是在服务中创建的,因此许多修改都需要删除和重新创建索引。 可以考虑使用一部分数据来加快重新生成的速度。

通过门户设计的索引可强制实施针对特定数据类型的要求和架构规则,例如,对数值字段禁用全文搜索功能。

  1. 登录 Azure 门户

  2. 在搜索服务概述页面中,选择以下任一选项来创建搜索索引:

    • “添加索引”是一种嵌入式编辑器,用于指定索引架构
    • 导入数据向导

    该向导是一个端到端工作流,用于创建索引器、数据源和已完成的索引。 它还会加载数据。 如果它对你来说大材小用,请改用“添加索引”。

以下屏幕截图突出显示了“添加索引”和“导入数据”在命令栏上的具体位置。 创建索引后,可以在“索引”选项卡中再次找到它。

Add index command

提示

在门户中创建索引后,可以复制 JSON 表示形式并将其添加到应用程序代码中。

为跨源查询设置 corsOptions

索引架构包含用于设置 corsOptions 的部分。 默认情况下,客户端 JavaScript 无法调用任何 API,因为浏览器将阻止所有跨域请求。 若要允许对索引进行跨域查询,请通过设置 corsOptions 来启用 CORS(跨域资源共享)。 出于安全原因,只有查询 API 才支持 CORS。

"corsOptions": {
  "allowedOrigins": [
    "*"
  ],
  "maxAgeInSeconds": 300

可为 CORS 设置以下属性:

  • allowedOrigins(必需):这是允许访问索引的源列表。 允许从这些源提供的 JavaScript 代码查询索引(假设调用方提供有效的密钥或具有权限)。 每个来源通常采用 protocol://<fully-qualified-domain-name>:<port> 格式,不过往往会省略 <port>。 有关详细信息,请参阅跨源资源共享 (Wikipedia)

    若要允许访问所有来源,请将 * 作为单个项目包含在 allowedOrigins 数组中。 不建议对生产搜索服务采用这种做法,但它在开发和调试中却很有用。

  • maxAgeInSeconds(可选):浏览器使用此值确定缓存 CORS 预检响应的持续时间(以秒为单位)。 此值必须是非负整数。 较长的缓存周期可提供更好的性能,但它延长了 CORS 策略生效所需的时间。 如果未设置此值,则使用默认持续时间为 5 分钟。

允许更新现有索引

创建索引会在搜索服务上创建物理数据结构(文件和倒排索引)。 创建索引后,使用更新索引进行更改的能力取决于该修改是否会使这些物理结构无效。 在索引中创建了字段后,大多数字段属性就无法更改。

或者,可以创建索引别名,该别名用作应用程序代码中的稳定引用。 可以不更新代码,而是将索引别名更新为指向较新的索引版本。

为了最大限度地减少设计过程中的流失,下表描述了架构中哪些元素是固定的以及哪些元素是灵活的。 更改固定元素需要重新生成索引,而灵活元素可以在不影响物理实现的情况下随时更改。

元素 是否可以进行更新?
名称
密钥
字段名称和类型
字段属性(可搜索、可筛选、可查找、可排序)
字段属性(可检索)
Analyzer 可以在索引中添加和修改自定义分析器。 对于字符串字段的分析器分配,只能修改 searchAnalyzer。 所有其他分配和修改都需要重新生成。
为配置文件评分
建议器
跨域远程脚本 (CORS)
加密

后续步骤

通过以下链接熟悉如何使用数据加载索引或使用同义词映射扩展索引。