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