Meilisearch 教學:搜「保濕」撈不到「保溼」,繁中站內搜尋要補三個設定

TL;DR

Meilisearch 是開源站內搜尋引擎,GitHub 59,447 顆星,最新版 v1.54.2。授權是 MIT 加 BUSL-1.1:社群版 MIT 可免費商用,企業版上正式環境要跟官方簽約;企業版獨占哪些功能官方寫法不一致(分片、複寫、S3 串流快照),要多台備援或資料大到要分片才會碰到。Docker image 分 getmeili/meilisearch 與 getmeili/meilisearch-enterprise 兩個。測試用一行 docker run(預設 development 模式),上線改 production;資料用 POST /indexes/products/documents 送 JSON、CSV、NDJSON,每筆要有主鍵(通常是 id),送出後要用 GET /tasks 查狀態才知道成功沒。真正花時間的是繁體中文:官方用 jieba 字典斷詞,字典以簡體為主,charabia 一個至今仍 open 的 issue 顯示,同一句話簡體斷出「尊严」,繁體卻被切成「尊/嚴」;他只比對詞的開頭,品牌名與商品名要加進自訂字典;短查詢要用 localizedAttributes 宣告成 cmn(普通話的語言代碼)。錯字容忍預設 5 個字元以上才生效,中文詞多半兩到四個字幾乎用不到,要改靠同義詞;字典、同義詞、語言宣告可用一個 PATCH /indexes/products/settings 一次設好。資源抓原始資料十倍的磁碟,雲端版起價每月 20 美元、可試用 14 天。

  • 社群版 MIT 可免費商用,企業版走 BUSL 1.1 上正式環境要簽約,Docker image 分 getmeili/meilisearch 與 meilisearch-enterprise 兩個,別拉錯
  • 中文用 jieba 字典斷詞,字典以簡體為主,簡繁寫法不同的字(嚴、權)組成的詞容易被切開,我的判斷是多半還搜得到,但排序可能打折
  • 他只比對詞的開頭,品牌名與商品名要加進自訂字典,但加了之後只搜詞的後半段反而可能找不到
  • 錯字容忍預設 5 個字元以上才生效,中文詞多半兩到四個字,中文要改靠同義詞,字典、同義詞、語言宣告可用一個 PATCH 一次設好
Meilisearch 是開源站內搜尋引擎,GitHub 59,447 顆星,最新版 v1.54.2。授權是 MIT 加 BUSL 1.1:社群版 MIT 可免費商用,企業版上正式環境要跟官方簽約;企業版獨占哪些功能官方寫法不一致(分片、複寫、S3 串流快照),要多台備援或資料大到要分片才會碰到。Docker image 分 getmeili/meilisearch 與 getmeili/meilisearch enterprise 兩個。測試用一行 docker run(預設 development 模式),上線改 production;資料用 POST /indexes/products/documents 送 JSON、CSV、NDJSON,每筆要有主鍵(通常是 id),送出後要用 GET /tasks 查狀態才知道成功沒。真正花時間的是繁體中文:官方用 jieba 字典斷詞,字典以簡體為主,charabia 一個至今仍 open 的 issue 顯示,同一句話簡體斷出「尊严」,繁體卻被切成「尊/嚴」;他只比對詞的開頭,品牌名與商品名要加進自訂字典;短查詢要用 localizedAttributes 宣告成 cmn(普通話的語言代碼)。錯字容忍預設 5 個字元以上才生效,中文詞多半兩到四個字幾乎用不到,要改靠同義詞;字典、同義詞、語言宣告可用一個 PATCH /indexes/products/settings 一次設好。資源抓原始資料十倍的磁碟,雲端版起價每月 20 美元、可試用 14 天。
⭐ Star 59.4k🟢 活躍維護 自架最低 RAM 256 MB來源

※ 資料集越大需要越多記憶體,256 MB 只是起跳門檻

docker run -it --rm -p 7700:7700 -e MEILI_MASTER_KEY=至少16位元組的金鑰 -v $(pwd)/meili_data:/meili_data getmeili/meilisearch:v1.54.2 # 測試用;上線改 -d 並加 -e MEILI_ENV=production。社群版 MIT,企業版是 getmeili/meilisearch-enterprise

訪客在你的保養品官網搜「保濕」,商品名寫成「保溼」的那幾件就是不出來;搜你家品牌名,排第一的卻是不相干的東西。Meilisearch 是什麼,我在 Meilisearch 開箱 講過,這篇只講動手。

兩件事都跟安裝無關,是中文沒設好。

授權:社群版就夠,image 別拉錯

GitHub 59,447 顆星,最新版 v1.54.2(2026 年 9 月 29 日)。LICENSE 原文是「MIT AND BUSL-1.1」:主體是 MIT 的社群版(Community Edition),可免費商用;標成企業版(Enterprise Edition)的部分走 BUSL 1.1,只能測試、開發,上正式環境要跟官方簽約。

要多台互相備援,或資料大到要分片(sharding),才會碰到企業版。

Docker image 也分兩個:getmeili/meilisearch 是社群版,getmeili/meilisearch-enterprise 是企業版。授權檔怎麼讀,可以看 接案前先打開 LICENSE。

安裝與匯入資料

先在自己電腦跑,預設是 development 模式,打開 localhost:7700 有搜尋預覽。以下指令以 macOS/Linux 終端機為準,Windows 建議在 WSL 裡跑:

docker run -it --rm -p 7700:7700 -e MEILI_MASTER_KEY=你的金鑰 -v $(pwd)/meili_data:/meili_data getmeili/meilisearch:v1.54.2

上線時把 -it --rm 換成 -d、加上 -e MEILI_ENV=production,主金鑰變強制、搜尋預覽會關掉。

資料用 API 送 JSON、CSV 或 NDJSON,匯進 products 索引:

curl -X POST 'http://localhost:7700/indexes/products/documents' -H 'Authorization: Bearer 你的金鑰' -H 'Content-Type: application/json' --data-binary @products.json

  1. 主金鑰(master key)至少 16 bytes,前端通常只放 Search API Key,主金鑰和 Admin Key 絕不能上前端
  2. 每筆都要有主鍵(primary key,通常是 id 欄位),缺一筆整批不寫入
  3. 回傳的只是任務編號(taskUid),要用 GET /tasks/編號 查狀態才知道成功沒,這種安靜的失敗最常被漏掉

官網、部落格不想匯出 JSON 的,雲端版有內建爬蟲,自架用 Scrapix。前端搜尋框用官方的 instant-meilisearch 搭 InstantSearch 接上。

中文斷詞:這段才是重點

官方文件寫中文用 jieba 字典斷詞(tokenization),有三件事要先知道。

繁體比簡體弱。 jieba 字典以簡體為主,Meilisearch 用的斷詞套件 charabia 有個 2025 年 4 月開、至今沒關的 issue:同一句話,簡體斷出「尊严」「权利」,繁體卻被切成「尊/嚴」「權/利」,簡繁寫法不同的字最容易被拆開。我的判斷是繁體多半搜得到,但排序會打折。

只比對詞的開頭。 2024 年有使用者回報、官方工程師解釋過(原文是簡體):「带根毛芹」被切成「带/根毛/芹」,搜「毛芹」就找不到。解法是自訂字典(dictionary),把品牌名、商品名加進去當成一個詞。但同一則 issue 也回報,加了「毛芹」之後搜「芹」反而找不到。

短查詢的語言很難猜。 邊打邊搜常常只有兩三個字,中文跟日文漢字容易混。用 localizedAttributes 把欄位宣告成 cmn(普通話的語言代碼),搜尋時也帶 locales,兩邊斷詞才會一致。

錯字容忍:中文幾乎用不到

官方預設一個詞 5 個字元以上才容許 1 個錯字,9 個以上容許 2 個。英文打 sevem 找得到 seven,中文詞多半兩到四個字,門檻碰不到;調低也難救,打錯一個字連斷詞都跟著變。

中文要靠同義詞(synonyms):「保濕/保溼」、品牌英文名跟中文俗稱。

字典和同義詞一個 PATCH 就能設好,語言宣告也能放同一包:

curl -X PATCH 'http://localhost:7700/indexes/products/settings' -H 'Authorization: Bearer 你的金鑰' -H 'Content-Type: application/json' --data-binary '{"dictionary":["你的品牌名"],"synonyms":{"保濕":["保溼"],"保溼":["保濕"]}}'

資源需求與雲端價格

官方建議磁碟抓原始資料的十倍,建索引預設最多吃三分之二記憶體。一般商品站資料量不大,真正要想的是要不要多養一個服務。

資源需求與雲端價格
面向社群版自架Meilisearch Cloud
授權MIT,可免費商用官方代管,跑企業版
費用只有主機錢起價每月 20 美元,可試用 14 天
搜尋分析沒有,要自己記有零結果率;點擊、轉換追蹤列在 Enterprise 方案,要前端回傳事件
升級備份自己來官方處理

照官方試算器預設值,用量計費每月 30 美元;最小的 XS 機器 23 美元,但官方標的是開發測試用,正式站多半從 S(1 vCPU、2 GB)起跳。

我的建議

先在自己電腦跑起來,拿網站最常被搜的 30 個詞(尤其繁體)試一輪,不準的先補字典跟同義詞,再決定要不要上線。

上線後盯著那張「搜了沒結果」的詞表,那是訪客親口說要、你卻沒有的東西。自架沒有報表,GA4 加強型評估的 view_search_results 只記搜了什麼(search_term),不知道有沒有結果。要那張表,就在前端拿到搜尋回傳的 estimatedTotalHits 為 0 時(用頁碼分頁看 totalHits),多送一個自訂事件帶上搜尋詞。

引擎再快,沒人讀那張搜不到的詞表也是白搭。把那些詞變成內容的工具,我整理在 AI101。

覺得有用?分享給需要的人 👇
何佳勳的觀點

我認為數據是觀察工具,不是決策工具。每次打開報表只看「數字升還是降」,不問「原因是什麼、下次的情境跟這次一樣嗎」,其實跟不看數據差不多。鈴木敏文的厲害不是更會看數據,是更會問問題——數據告訴你已經發生的事,但你需要的是基於數據的假設。

何佳勳的觀點

我自己在學 AI 工具的方法,就是先動手做出一個小到不能再小的版本,再回頭優化。我寫教學也照這個邏輯,與其解釋一個技巧,不如用文章本身的形式直接演給讀者看,看到比讀到多十倍說服力。

不想碰伺服器,只想要結果?

這個 GitHub 專案功能完整,但你得自己配 server、串 API 金鑰、扛維運。

如果你現在只是要 AI 幫你寫文案、拆工作流、生行銷內容,免安裝、開箱即用的線上工具會更快上手。

到 AI101 試試「部落格 SEO 長文產生器」 →

常見問題

Meilisearch 支援繁體中文搜尋嗎?

支援,但要多做設定。官方文件寫中文用 jieba 字典斷詞並做異體字轉換,但 jieba 的字典以簡體為主,Meilisearch 的斷詞套件 charabia 有一個 2025 年 4 月開、至今仍未關閉的 issue,測試中同一句話簡體斷出「尊严」「权利」,繁體卻被切成「尊/嚴」「權/利」,簡繁寫法不同的字組成的詞最容易被拆開。實務上建議把品牌名、商品名加進自訂字典(dictionary),用 localizedAttributes 把欄位宣告為 cmn(普通話的語言代碼)、搜尋時帶 locales 參數,再用同義詞補常見異寫;這三項可以用一個 PATCH /indexes/{索引名稱}/settings 一次送出。上線前拿網站真實的熱門搜尋詞實測一輪。

Meilisearch 可以免費商用嗎?社群版跟企業版差在哪?

社群版(Community Edition)是 MIT 授權,可以免費商用。企業版(Enterprise Edition)的程式碼走 BUSL 1.1,只能用於測試、開發、評估,上正式環境需要跟官方簽商業授權,每個版本發布滿四年後轉為 MIT。企業版獨占哪些功能,官方文件寫法不一致:企業版說明頁寫只有分片(sharding),分片說明頁寫分片與複寫(replication)都需要企業版 v1.37 以上,GitHub README 另外列了 S3 串流快照。一般官網或商品站用一台社群版通常就夠,需要多台互相備援、或資料大到要分片時才會碰到企業版。Docker 映像也分成 getmeili/meilisearch(社群版)與 getmeili/meilisearch-enterprise(企業版)兩個。

Meilisearch 雲端版多少錢?自架需要多少資源?

官網標示 Meilisearch Cloud 起價每月 20 美元,提供 14 天免費試用、不需信用卡;用官方試算器預設值計算,用量計費約每月 30 美元(含 10 萬筆文件、5 萬次搜尋),資源計費最小的 XS 規格(0.5 vCPU、1 GB RAM)約每月 23 美元,但官方把 XS 標為開發與測試用,正式上線多半從 S 規格(1 vCPU、2 GB RAM,官方標示約可放 8 萬筆小型文件)起跳。自架沒有固定規格,官方建議磁碟至少準備原始資料的十倍,搜尋速度取決於記憶體與資料庫大小的比例,建索引時預設最多使用三分之二的記憶體。