返回首页Meilisearch 的标志
返回文章
2023年9月21日

破解难题:Symfony 为 1200 万字文档提供的搜索解决方案

Symfony 为 30 个版本和 1200 万字文档提供搜索导航。

Maya Shin
Maya ShinMeilisearch 市场营销负责人mayya_shin
Cracking the code: Symfony's search solution for 12 million words of documentation

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 经验的开发人员能够使用 Meilisearch PHP 集成与 Symfony HttpClient 组件,完成整个迁移和实施过程。

以下是技术集成过程的简要概述

  1. 解析 Symfony 文档:对于 Symfony 的文档,该过程包括将整个页面内容拆分成多个小文档,以产生与查询词紧密相关的更好搜索结果。
  2. 索引文档是整个过程中最简单的部分,包括配置停用词(在搜索查询中要忽略的词列表)和同义词,以产生更好的搜索结果。

要全面了解 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。

Scaling to billions: How Agora elevates e-commerce search with Meilisearch AI

扩展至数十亿:Agora 如何利用 Meilisearch AI 提升电商搜索

Agora 借助 Meilisearch 为电商搜索提供快速、直观和可扩展的动力。

Maya Shin
Maya Shin2025年3月26日
How Rayon leverages AI semantic features for a seamless design UX

Rayon 如何利用 AI 语义功能实现无缝设计用户体验

Rayon 选择 Meilisearch 旨在帮助设计专业人士实现无缝用户体验。

Maya Shin
Maya Shin2025年3月20日
AI-Powered discovery: how MotionElements elevates creators

AI 驱动的发现:MotionElements 如何赋能创作者

MotionElements 选择 Meilisearch 以实现更快的搜索性能、更高的准确性和更高的用户参与度。

Maya Shin
Maya Shin2025年3月17日