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

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 一次設好
※ 資料集越大需要越多記憶體,256 MB 只是起跳門檻
訪客在你的保養品官網搜「保濕」,商品名寫成「保溼」的那幾件就是不出來;搜你家品牌名,排第一的卻是不相干的東西。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
- 主金鑰(master key)至少 16 bytes,前端通常只放 Search API Key,主金鑰和 Admin Key 絕不能上前端
- 每筆都要有主鍵(primary key,通常是 id 欄位),缺一筆整批不寫入
- 回傳的只是任務編號(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 萬筆小型文件)起跳。自架沒有固定規格,官方建議磁碟至少準備原始資料的十倍,搜尋速度取決於記憶體與資料庫大小的比例,建索引時預設最多使用三分之二的記憶體。
每週一封,上週精選寄給你
每週一早上寄一封,把上週站上新上架的文章挑出來給你。行銷觀點建立判斷力,工具開箱幫你選對工具,隨時可以退訂。