索引最佳实践
加速文档索引处理过程的小技巧。
在本指南中,您将了解如何高效地索引数据并加速索引过程的最佳实践。
定义可搜索字段
请检查您的可搜索字段列表,确保其中仅包含需要匹配查询词的字段。通过从数据库中移除无关数据,这既能提升相关性也能加快搜索速度。同时还能将磁盘使用率保持在必要的最低水平。
默认情况下,所有文档字段都是可搜索的。Meilisearch 需要索引的字段越少,索引过程就越快。
检查可筛选和可排序字段
某些文档字段对于筛选和排序结果是必需的,但它们不需要被设为_可搜索_。通常来说,数值型和布尔型字段属于此类。请务必检查您的可搜索字段列表,移除仅用于筛选或排序的字段。
在添加文档前配置索引
创建新索引时,请先配置索引设置,然后再添加文档。每当您更新排序规则等设置时,Meilisearch 都会触发对所有文档的重新索引。这可能是个耗时的过程,特别是在数据集较大的情况下。因此,最好在索引数据之前就定义好排序规则和其他设置。
优化文档大小
较小的文档处理速度更快,因此请确保从文档中删除所有不必要的数据。当某个文档字段不在可搜索字段、可筛选字段、可排序字段或显示字段列表中时,最好将其从文档中移除。更进一步,可以考虑使用br、deflate或gzip等方法压缩数据。请参阅支持的编码格式参考。
优先使用较大的 HTTP 负载
单个较大的 HTTP 负载比多个小负载处理得更快。例如,将相同的 10 万份文档分成两批 5 万份添加,会比分成四批 2.5 万份更快。默认情况下,Meilisearch 将最大负载大小设置为 100MB,但如有需要可以调整此值。
较大的负载会消耗更多内存。如果实例所需内存超过机器当前可用内存,可能会导致崩溃。
保持 Meilisearch 更新
请确保您的 Meilisearch 实例保持最新状态,以获取最新的性能改进。您可以在 GitHub 上查看所有引擎版本的发布列表。
要了解更多关于索引底层工作原理的信息,请参阅这篇关于索引最佳实践的博客文章。
不要将 Meilisearch 作为主数据库使用
Meilisearch 专为信息检索优化,并非设计用作主要数据容器。随着文档数量增加,索引和搜索耗时将显著增长。请仅索引那些需要在搜索时检索的文档。
为多语言数据创建独立索引
若您拥有多语言数据集,建议为每种语言创建单独的索引。
移除 I/O 操作限制
请确保您的机器没有 I/O 操作限制。云服务提供商(如 AWS 的 Amazon EBS 服务)施加的限制会严重影响索引性能。
考虑升级至配备 SSD、更大内存和多线程处理器的机器
若遵循本指南前述建议后仍遭遇索引缓慢问题,建议考虑升级硬件配置。
索引操作具有内存密集型和多线程特性。可用内存和处理器核心越多,Meilisearch 建立新文档索引的速度就越快。在提升索引速度时,增加处理器核心数比扩充内存更有效。
鉴于 Meilisearch 的工作原理,建议避免使用 HDD(机械硬盘),因其极易成为性能瓶颈。
使用 AI 增强搜索时启用二进制量化
若在为 AI 增强搜索建立文档索引时遇到性能问题,可考虑为嵌入器启用二进制量化。该技术通过用 1 比特值表示每个维度来压缩向量,虽会略微降低语义搜索的相关性,但能显著提升性能。
二进制量化最适合文档量超过 100 万且使用维度数超过 1400 的模型的大型数据集。
激活二进制量化是不可逆的。 一旦启用,Meilisearch 会转换所有向量并丢弃所有无法用 1 位表示的数据。恢复向量原始值的唯一方法是使用新的嵌入器对整个索引重新进行向量化。