破解密碼: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 作為一個具有活躍社群的開源專案所建立的聲譽,在影響最終決策方面發揮了關鍵作用。
實作
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。