本指南将介绍一些高效索引数据和加快索引过程的最佳实践。

定义可搜索属性

检查您的可搜索属性列表,并确保它只包含您希望用于查询词匹配的字段。这通过从数据库中删除不相关的数据来提高相关性和搜索速度。它还将使您的磁盘使用量保持在必要的最低限度。

默认情况下,所有文档字段都是可搜索的。Meilisearch 需要索引的字段越少,索引过程就越快。

检查可过滤和可排序属性

某些文档字段对于过滤排序结果是必需的,但它们不需要可搜索。通常,数值和布尔字段属于此类别。请务必检查您的可搜索属性列表,并删除仅用于过滤或排序的任何字段。

在添加文档之前配置索引

创建新索引时,请先配置其设置,然后再添加文档。每当您更新排名规则等设置时,Meilisearch 将触发所有文档的重新索引。这可能是一个耗时的过程,特别是当您拥有大型数据集时。因此,最好在索引数据之前定义排名规则和其他设置。

优化文档大小

较小的文档处理速度更快,因此请确保从文档中删除任何不必要的数据。当文档字段在可搜索可过滤可排序显示属性列表中缺失时,最好将其从文档中删除。此外,可以考虑使用brdeflategzip等方法压缩数据。请查阅支持的编码格式参考

优先使用更大的 HTTP 有效负载

单个大型 HTTP 有效负载的处理速度比多个小型有效负载更快。例如,以两批次(每批次 50,000 个文档)添加相同的 100,000 个文档,会比以四批次(每批次 25,000 个文档)添加更快。默认情况下,Meilisearch 将最大有效负载大小设置为 100MB,但如果需要,可以更改此值

更大的有效负载会消耗更多 RAM。如果实例所需的内存超过机器当前可用内存,它可能会崩溃。

保持 Meilisearch 最新

请确保您的 Meilisearch 实例保持最新,以便受益于最新的改进。您可以在GitHub 上查看我们所有引擎版本的列表

有关索引工作原理的更多信息,请查阅这篇关于索引最佳实践的博客文章

不要将 Meilisearch 用作您的主数据库

Meilisearch 针对信息检索进行了优化,并非设计为您的主要数据容器。您添加的文档越多,索引和搜索所需的时间就越长。只索引您在搜索时希望检索的文档。

为多种语言创建单独的索引

如果您有多语言数据集,请为每种语言创建一个单独的索引。

移除 I/O 操作限制

确保您的机器上没有 I/O 操作限制。云提供商(例如AWS 的 Amazon EBS 服务)施加的限制会严重影响索引性能。

考虑升级到配备 SSD、更多 RAM 和多线程处理器的机器

如果您已遵循本指南中的先前提示,但仍遇到索引时间慢的问题,请考虑升级您的机器。

索引是内存密集型和多线程操作。可用的内存和处理器核心越多,Meilisearch 索引新文档的速度就越快。在尝试提高索引速度时,使用具有更多处理器核心的机器比增加 RAM 更有效。

由于 Meilisearch 的工作方式,最好避免使用 HDD(硬盘驱动器),因为它们很容易成为性能瓶颈。

如果您在使用 AI 搜索索引文档时遇到性能问题,请考虑为您的 Embedder 启用二进制量化。二进制量化通过用 1 位值表示每个维度来压缩向量。这会降低语义搜索结果的相关性,但会大大提高性能。

二进制量化最适用于包含超过 100 万个文档的大型数据集,以及使用具有超过 1400 个维度的模型。

启用二进制量化是不可逆的。一旦启用,Meilisearch 将转换所有向量,并丢弃所有不适合 1 位表示的向量数据。恢复向量原始值的唯一方法是在新的 Embedder 中重新向量化整个索引。