破解代码:Symfony 为 1200 万字文档提供的搜索解决方案
Symfony 导航搜索 30 个版本和 1200 万字的文档。

Symfony 是一个用于 PHP 的开源 Web 开发框架,使用户能够通过利用一组可重用组件来创建 Web 应用程序。Symfony 起源于法国,结合了 Web 应用程序框架、一种理念和一个充满活力的社区。
通过 Meilisearch,Symfony 更好地控制了文档内容的解析和索引,从而加速并提高了搜索结果的质量。
到目前为止,使用 Meilisearch 一直是一种乐趣。一切都始于其快速而简单的安装过程,其次是其出色而详尽的文档,最终以性能惊人的强大搜索引擎而告终。Meilisearch 感觉有趣、新鲜且简单。 - Javier Eguiluz,Symfony 布道师。
挑战
从 Symfony 的文档中快速有效地检索信息对于其快速增长的社区的成功至关重要。Symfony 文档,包括代码示例,包含超过 1200 万字,并且在其历史中,Symfony 发布了 30 个不同的版本更新,这使得从文档中顺利检索信息至关重要。事实上,为了确保 symfony.com 访问者尽可能容易地访问搜索功能,该团队集成了多个键盘快捷键,以在整个网站上打开搜索输入框。
过去,Symfony 团队探索了各种产品和服务,包括 Apache Solr、Elasticsearch、Google Custom Search Engine 和 Algolia Search。然而,该团队意识到需要更好地控制搜索内容的解析和索引,以便调整搜索规则,从而改善网站导航和整体搜索体验。虽然使用完全托管的服务很方便,但预先存在的通过 JSON 文件的配置被证明很麻烦,并且没有为 Symfony 提供所需的灵活性。
其次,有可能提高搜索结果的整体质量,Symfony 团队收到了一些文档用户关于不准确或丢失结果的投诉。不幸的是,由于前面提到的对解析和索引过程缺乏控制,对这些结果进行重大改进是无法实现的,并且对更好替代方案的需求变得显而易见。
为什么 Symfony 选择 Meilisearch
为了找到更好的替代方案,Symfony 团队开始研究搜索引擎。从一开始,首选就是用 Go 开发的开源项目,因为该语言已经存在内部的先前专业知识。虽然市场上有许多符合这些要求的搜索解决方案,但其中许多缺乏积极的开发,没有活跃的社区,或者缺少基本功能,例如对同义词的支持。
最后,该团队考察了 Meilisearch,它提供了一个用 Rust 开发的开源搜索引擎,以及一个自托管选项,并很快找到了合适的解决方案。Meilisearch 作为具有活跃社区的开源项目的既有声誉在影响最终决策方面发挥了关键作用。
实施
Meilisearch 提供与各种编程语言和框架的集成。除了托管 Symfony 的索引数据外,Meilisearch 团队在迁移过程中提供了宝贵的帮助,因此一位没有 Meilisearch 先前经验的开发人员能够使用 Symfony HttpClient 组件的 Meilisearch PHP 集成来处理整个迁移和实施过程。
以下是技术集成过程的简要概述
- 解析 Symfony 文档:对于 Symfony 的文档,该过程包括将整个页面内容拆分为多个小文档,以便生成更好的搜索结果,这些结果与查询词密切相关。
- 索引文档是该过程中最简单的部分,包括配置停用词(搜索查询中要忽略的单词列表)和同义词,以产生更好的搜索结果。
要完整了解 Symfony 如何实施其文档解析、文档索引和搜索引擎界面,我们建议您查看他们在将 symfony.com 搜索引擎迁移到 Meilisearch 上的博客文章。
结果
Symfony 团队在评估结果时主要关注两个不同的性能方面
- 内容索引的性能:Meilisearch 每秒可以索引大约 800 个完整文档,其中包括处理数百个停用词和数十个同义词。
- 查询性能:Symfony,包括所有版本的 Symfony 文档和捆绑包文档,解析了 12,754 个文件并生成了 85,146 个 Meilisearch 文档。解析、创建和索引所有这些文档的总时间为 17 秒。搜索索引大约消耗 1.2 GB 的磁盘空间,大多数查询在不到 10 毫秒内返回结果。
Symfony 核心团队成员 Nicolas Grekas 总结如下:“这些数字令人印象深刻,并且在您键入时实时更新搜索结果时提供了出色的体验。”
为了完成评估过程,Symfony 团队对之前的搜索引擎结果和新的 Meilisearch 引擎进行了全面的比较。他们测试了典型查询、罕见查询、长查询和带有拼写错误的查询。以下是在实施 Meilisearch 之前(左)和之后(右)获得的搜索结果的比较
自从部署新的搜索体验以来,该团队尚未收到来自社区的任何负面反馈,这通常可以作为搜索体验质量的指标。
愿景
目前,Symfony 团队对 Meilisearch 的功能产品感到满意,该产品提供了所有必要的基本功能,包括索引任意信息、排序、结果加权、处理停用词、同义词、facets、过滤等等。
Symfony 布道师 Javier Eguiluz 建议:“在将其集成到您的项目中之前,请注意一些已知限制。如果您的项目要求很复杂(例如,多个索引之间的交叉 facets 等),请确保检查是否已支持这些高级功能。此外,最好查看 Meilisearch 公开路线图。”
要完整了解 Symfony 如何实施其文档解析、文档索引和搜索引擎界面,我们建议您查看他们在将 symfony.com 搜索引擎迁移到 Meilisearch。
准备好优化您的文档搜索了吗?立即开始 Meilisearch 的免费试用。