在 Azure AI 搜索中删除并重新生成索引
本文介绍如何删除并重新生成 Azure AI 搜索索引。 其中解释了在哪种情况下需要重新生成,并提供了有关缓解重新生成索引对正在进行的查询请求的影响的建议。 如果你经常需要重新生成索引,建议使用索引别名,以便更轻松地交换你的应用程序指向的索引。
在活跃的开发过程中,经常需要在迭代索引设计时删除并重新生成索引。 大多数开发人员使用具有代表性的小型数据示例,使重新编制索引速度更快。
需要重新生成索引的修改
下表列出了需要删除和重新生成索引的修改。
操作 | 说明 |
---|---|
删除字段 | 若要以物理方式删除字段的所有跟踪,必须重新生成索引。 在立即重新生成不可行时,可修改应用程序代码以重定向访问,使其远离过时的字段,或者使用 searchFields 和 select 查询参数来选择要搜索和返回的字段。 实际上,当你应用省略了相关字段的架构时,字段定义和内容会一直保留在索引中,直至下次重新生成。 |
更改字段定义 | 对字段名称、数据类型或特定的索引属性(可搜索、可筛选、可排序、可查找)的修改需要完全重新生成。 |
向字段分配分析器 | 分析器在索引中定义,分配给字段,然后在索引编制期间进行调用,以告知令牌的创建方式。 随时都可以向索引添加新的分析器定义,但只有在创建字段时才能分配分析器。 对于 analyzer 和 indexAnalyzer 属性都是如此。 searchAnalyzer 属性是一个例外(可以向现有字段分配此属性)。 |
更新或删除索引中的分析器定义 | 无法删除或更改索引中的现有分析器配置(分析器、tokenizer、令牌筛选器或字符筛选器),除非重新生成整个索引。 |
将字段添加到建议器 | 如果某个字段已存在,并且希望将其添加到建议器构造,则重新生成索引。 |
切换层 | 不支持就地升级。 如果需要更多容量,创建新服务并从头开始重新生成索引。 若要自动完成此过程,可以使用此 Azure AI 搜索 .NET 示例存储库中的 index-backup-restore 示例代码。 此应用会将索引备份到一系列 JSON 文件,然后在指定的搜索服务中重新创建索引。 |
不要求重新生成索引的修改
可以在不影响现有物理结构的情况下进行许多其他修改。 具体而言,以下更改不需要重新生成索引。 对于这些更改,可以使用你的更改来更新现有索引定义。
- 添加新字段
- 在现有字段上设置“可检索”属性
- 在具有现有 indexAnalyzer 的字段上更新 searchAnalyzer
- 在索引中添加新的分析器定义(该定义可应用于新字段)
- 添加、更新或删除计分概要文件
- 添加、更新或删除 CORS 设置
- 添加、更新或删除 synonymMaps
添加新字段时,将在新字段中为已编制索引的现有文档提供 null 值。 将来刷新数据时,外部源数据中的值会替换 Azure AI 搜索添加的 null 值。 有关更新索引内容的详细信息,请参阅添加、更新或删除文档。
如何重新生成索引
在开发过程中,索引架构会频繁更改。 可以通过以下方式对索引架构进行规划:使用小型的具有代表性的数据集创建可以快速删除、重新创建和重新加载的索引。
对于已投入生产的应用程序,建议创建一个与现有索引并排运行的新索引,以避免查询时停机。 应用程序代码提供到新索引的重定向。
检查空间。 搜索服务受最大索引数量(因服务层而异)的限制。 确保你有第二个索引的空间。
确定是否需要重新生成。 如果只是添加字段或更改与字段无关的索引部分,则可以只更新定义,而无需删除、重新创建并完全重新加载它。
获取索引定义,以备将来参考。
删除现有索引,前提是你没有并行运行新索引和旧索引。
任何针对该索引的查询都会被立即删除。 请注意,删除索引是不可逆的,此操作会销毁字段集合和其他构造的物理存储空间。 在删除之前,请先考虑这样做的影响。
创建修订的索引,其中,请求正文包括已更改或已修改的字段定义。
通过外部源使用文件加载索引。
创建索引时,将为索引架构中的每个字段分配物理存储,并为每个可搜索字段创建反向索引。 不可搜索的字段可以用于筛选器或表达式中,但没有反向索引也不支持全文或模糊搜索。 在重新生成索引时,将删除这些反向索引,并根据提供的索引架构重新创建。
加载索引时,每个文档中所有唯一的标记化字词都会填充每个字段的反向索引,并映射到相应的文档 ID。 例如,在为酒店数据集编制索引时,为城市字段创建的反向索引可能包含西雅图、波特兰等的术语。 对于城市字段中包含西雅图或波特兰的文档来说,文档 ID 将随术语一同列出。 在任何添加、更新或删除操作中,都会相应地更新术语和文档 ID 列表。
实现工作负载均衡
索引不在后台运行,但搜索服务会将所有索引作业与正在进行的查询进行均衡。 在编制索引期间,可以在门户中监视查询请求,以确保查询及时完成。
如果索引工作负载导致查询延迟达到不可接受的级别,请执行性能分析,并查看这些性能提示来了解潜在的缓解措施。
检查更新
在加载第一个文档时就可以开始查询索引。 如果你知道文档的 ID,那么查找文档 REST API 将返回特定的文档。 对于更大型的测试,应该等待索引完全加载,然后使用查询来验证你想看到的上下文。
如果添加或重命名了字段,请使用 $select 返回该字段:search=*&$select=document-id,my-new-field,some-old-field&$count=true