台中一家工具機零件型錄站,上月站內搜尋 8,412 次,其中 2,610 次(31%)零結果。查 log 才懂:客人打「軸承 6205」,資料庫寫「深溝球軸承6205ZZ」;打「油封」,型錄叫「迴轉軸密封件」。搜尋沒壞,它只會字串比對。零結果 session 跳出率 74%,全站平均 38%。Baymard 2026 基準顯示,56% 電商網站的搜尋體驗屬「中等或更差」。
適用情境 × 不適用情境
該做
- 可搜內容超過 800 筆,分類選單已點不完。
- 同一商品有學名、俗名、型號、英文縮寫多種叫法。
- GA4 搜尋事件佔 session 8% 以上,搜尋後轉換率明顯較高。
- B2B 型錄、零件、法規知識庫這類使用者知道要什麼的內容。
不適用情境
- 內容少於 300 筆的形象站:分類頁做好更划算。
- 月流量低於 3,000 session:log 樣本太少,調同義詞只能靠猜。
- 資料髒亂:規格塞在描述欄、料號未正規化,先清資料。
- 沒人負責看報表:搜尋要持續餵養,不是一次性交付。
- 單一 SKU 訂閱制或以預約為主的網站。
替代方案矩陣
| 方案 | 繁中處理 | 錯字容錯 | 月成本 NT$ | 適合 |
|---|---|---|---|---|
| MySQL LIKE | 無斷詞,前置萬用字元讓索引失效 | 無 | 0 | 500 筆內後台 |
| MySQL FULLTEXT + ngram | 官方 CJK ngram 切字,預設 token size 2,需自建中文停用詞 | 無 | 0 | 2,000 筆內 |
| Meilisearch/Typesense 自架 | Meilisearch 用 jieba 詞典斷詞、kvariant 做繁簡正規化 | 內建 | VPS 800–1,200 | 1 萬–100 萬筆 |
| Algolia SaaS | CJK 成熟、後台完整 | 內建可分級 | 20 萬次約 2,950 | 不想養機器 |
| Elasticsearch/OpenSearch 自架 | 需裝 analysis-icu 或 smartcn | 需手調 fuzziness | 8GB 機 2,400 起 | 百萬筆、複雜聚合 |
| 向量語意(hybrid) | 不靠斷詞,懂「適合送禮」這類描述 | 天生容錯 | embedding 300–900 | 知識庫、FAQ |
完整流程拆解
| 階段 | 時間 | 做什麼 | 交付物 |
|---|---|---|---|
| Query log 盤點 | 3 天 | 埋 GA4 事件與 search_logs 表,收兩週查詢 | 零結果 Top 100 清單 |
| 資料建模 | 4 天 | 定可搜欄位與權重,把規格拆成 facet | 索引 schema 與權重表 |
| 索引管線 | 5 天 | 用 Laravel Scout 串 Meilisearch,Queue 非同步、Observer 增量更新 | 可重跑 reindex 指令 |
| 繁中調校 | 5 天 | 建自訂詞典、同義詞與停用詞,處理注音誤打與英數混排 | synonyms.json、詞典檔 |
| 前端體驗 | 6 天 | autocomplete、facet 篩選、零結果引導頁 | InstantSearch.js 元件 |
| 量測交接 | 4 天 | Metabase 追零結果率與 CTR@3;依 Google 對無限空間的建議以 robots.txt 擋搜尋 URL | 週報範本與維運手冊 |
真實成本完整拆解
以 6 萬筆商品、月 20 萬次搜尋估算。建置:基礎版 45 工時,NT$68,000;含 facet、hybrid 與儀表板的完整版 88 工時,NT$132,000。平台費:Meilisearch Cloud 起價 US$20/月,用量型 US$30/月含 10 萬文件與 5 萬次搜尋;改走 Algolia Grow,前 1 萬次搜尋免費、之後每千次 US$0.50,20 萬次即 US$95(約 NT$2,950)。隱藏費用:全量重建索引每次佔機 1.5–3 小時、一年約 6 次;同義詞維運 NT$4,500/月;斷詞辭典每季 4 工時 NT$6,000;零結果告警與儀表板一次性 NT$9,000。第一年總持有成本 NT$14 萬–19 萬。
實施真相 vs 客戶想像
| 客戶想像 | 實施真相 |
|---|---|
| 裝上 Meilisearch 就會準 | 引擎只管召回。第一版通常還有 12–18% 零結果,要兩三輪 log 調校才壓到 5%。 |
| 繁體中文自動支援 | Meilisearch 靠 jieba 詞典並把繁體正規化成簡體變體,好處是繁簡通搜,代價是「乾」「幹」會被合併,專有名詞仍得自己補。 |
| 加個搜尋框兩天就好 | API 確實兩天,但把規格從描述欄拆成結構化欄位要 4–6 天,那才是最貴的部分。 |
常見陷阱 × 怎麼避開
- LIKE 撐到十萬筆:前置萬用字元讓索引失效,查詢從 30ms 變 4 秒。解法:超過 2,000 筆改 FULLTEXT,超過 1 萬筆上 Meilisearch。
- ngram token size 沒調:預設 2,搜單字「傘」完全搜不到,停用詞邏輯也與預設 parser 不同。解法:依常見查詢長度設定並自建停用詞表。
- 料號被切碎:「6205ZZ」被切成「6205」與「ZZ」,排序全亂。解法:料號獨立成不斷詞的 keyword 欄位並給高權重。
- 容錯開太猛:短料號差一字元就變另一件商品。解法:設最小容錯字長 5 字元,料號關閉容錯。
- 零結果頁是死路:Baymard 建議零結果頁必須給下一步。解法:自動放寬條件、推相近分類與熱門商品,並放客服入口。
- 同步寫入索引:後台存檔直打索引 API,一逾時整筆失敗。解法:改 Queue 非同步並加每日校正 job。
成功指標 + 90 天路線圖
- 1–30 天:埋 log 與 GA4 事件,產出零結果 Top 100,量出零結果率、搜尋後轉換率、CTR@3 基準線。
- 31–60 天:Meilisearch 上線、autocomplete 與零結果頁改版。目標零結果率 31% 降到 12% 以下,CTR@3 從 41% 拉到 55%。
- 61–90 天:依點擊調權重、對長尾查詢導入 hybrid 語意。目標零結果率 5% 以下、搜尋後轉換率為無搜尋 session 的 1.8 倍,並固定每月檢視例會。
決策清單
- ☐ 可搜內容超過 800 筆?
- ☐ 有記錄每一筆搜尋關鍵字嗎?
- ☐ 知道目前零結果率嗎?
- ☐ 同一商品有三種以上叫法?
- ☐ 料號有固定格式可獨立成欄位?
- ☐ 規格已從描述欄拆出來?
- ☐ 需要 facet 篩選嗎?
- ☐ 使用者常打錯字或注音誤打?
- ☐ 月搜尋數超過 5 萬次?
- ☐ 有人每月看搜尋報表?
- ☐ robots.txt 擋了搜尋結果頁?
- ☐ 重建索引有排程與回滾?
- ☐ 預算含第一年維運費?
常見問題
MySQL FULLTEXT 加 ngram 就夠了嗎?
2,000 筆內、不需要容錯與 facet,MySQL 夠用且零成本。一旦要 typo tolerance、即時 autocomplete 與相關性排序,自己刻的工時會超過直接接 Meilisearch。分水嶺是有沒有人抱怨搜不到。
Meilisearch、Typesense、Algolia 怎麼選?
不想養機器、能接受用量計費選 Algolia;要控成本、資料留在自己機器選 Meilisearch 自架;要帳單可預測選 Typesense Cloud,它按叢集小時計費而非按筆數。三者都有 Laravel Scout driver。
繁中詞典一定要自己維護?
要。通用詞典不認得自有品牌、內部型號縮寫與行業黑話。第一版約 150–400 條,之後每季從零結果 log 補 20–40 條,一季 4 工時可維持。
下一步
ScriptWalker 的「站內搜尋建置與調校方案」NT$68,000 起,含 Laravel Scout 串接、繁中詞典初版、autocomplete 與零結果頁;完整版加 facet、hybrid 語意與 query log 儀表板,NT$132,000。把兩週搜尋 log 給我們,先免費做零結果分析。
- Email:[email protected]
- 電話:0916-224-047
- LINE:@ufv9089p