Elasticsearch Text vs Keyword:搞懂全文檢索與聚合分析的關鍵差異

更新 發佈閱讀 5 分鐘

如果你也曾在 Elasticsearch 查詢時遇過這種疑惑——「為什麼有些欄位能聚合、有些卻不行?」 「LIKE "*python*" 在某些欄位能搜尋,在另一些卻沒結果?」
那你一定要看完這篇
ES 7.x 之後,string 類型被拆分成兩種用途明確的新型別:
text 用於 全文檢索(Full-text Search)
keyword 用於 精確匹配(Exact Search)與聚合(Aggregation)
這篇文章會幫你一次釐清它們的差別、實際應用場景與最佳實踐!

為什麼會有 Text 與 Keyword 之分?

在舊版 Elasticsearch 裡,所有字串都是 string 類型。
但這樣的設計導致模糊搜尋與聚合分析互相衝突。
官方將字串類型拆為:

  • text:經過分詞(tokenized),可進行全文檢索。
  • keyword:不分詞,適合精確比對與聚合分析。

1. Text 類型 — 為全文搜尋而生

用途

text 類型適合儲存「自然語言」內容,如日誌訊息、描述文字、文章內文。
它會先經過 Analyzer(分析器) 斷詞,再建立索引。

屬性 說明

是否分詞 會分詞
查詢方式 支援模糊、全文查詢
是否支援聚合 不支援
適用場景 日誌內容、文字描述等需全文搜索的欄位

範例

SELECT crond_message
FROM cwb-linux
WHERE crond_message LIKE '*python*'
AND @timestamp BETWEEN '2022-12-16T00:35:38.831Z' AND '2022-12-20T10:35:38.831Z'
LIMIT 10000

對應的 mapping:

"crond_message": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}

小提示:
Elasticsearch 預設會幫 text 欄位建立一個 .keyword 子欄位,用於精確匹配。

2. Keyword 類型 — 精確匹配與聚合分析的主角

用途

keyword 適合儲存「結構化」字串,例如:主機名稱、ID、IP、分類、標籤等。

屬性 說明
是否分詞 不分詞
查詢方式 精確匹配或 wildcard 模糊查詢
是否支援聚合 支援
適用場景 ID、名稱、類別、標籤等需統計或篩選的欄位

範例

SELECT host.hostname
FROM iis-w3c-*
WHERE host.hostname LIKE '*IIS*'
LIMIT 10000

對應的 mapping:

"host": {
"properties": {
"hostname": { "type": "keyword" },
"ip": { "type": "keyword" },
"os": {
"properties": {
"name": { "type": "keyword" },
"version": { "type": "keyword" }
}
}
}
}

Text vs Keyword 一覽表

屬性 text keyword
是否分詞
精確查詢 需用 .keyword 直接支援
模糊查詢(wildcard) 有限支援 支援
聚合(Aggregation) 不支援 支援
適用場景 文章內容、訊息 ID、主機名、分類
檢索類型 全文檢索 精確匹配、統計

結語:如何選擇才對?

選擇 textkeyword 並不是非黑即白。
最好的做法是根據使用場景設計 mapping:

  • 若你想搜尋「內容包含 XXX」:選 text
  • 若你想問「這台主機出現幾次」:選 keyword

清楚區分兩者的行為,就能避免查詢結果錯誤、聚合失敗、或前端判斷複雜的問題。


留言
avatar-img
小猴工程師
2會員
31內容數
以工程師視角拆解技術與生活的連結。專長 DevOps、AI 與區塊鏈,把艱深的技術轉化為易懂的故事。 文章主題橫跨技術筆記、實作教學與個人經驗分享。 寫作理念:讓每個想靠技術改變生活的人,都能在這裡找到啟發。
小猴工程師的其他內容
2025/10/20
解釋 Dockerfile 中 CMD 與 ENTRYPOINT 的區別與搭配使用方式,釐清兩者在容器啟動時的執行順序與覆蓋關係,並說明 Shell form 和 Exec form 的差異,幫助開發者更靈活地運用。
Thumbnail
2025/10/20
解釋 Dockerfile 中 CMD 與 ENTRYPOINT 的區別與搭配使用方式,釐清兩者在容器啟動時的執行順序與覆蓋關係,並說明 Shell form 和 Exec form 的差異,幫助開發者更靈活地運用。
Thumbnail
2025/10/17
Docker 儼然已成為軟體開發與部署的標準工具。而 Dockerfile 作為自動化建構映像檔的關鍵腳本,更是不可或缺。本文將帶你深入瞭解 Dockerfile 的基本結構、常用指令,並透過實際範例,從零開始建構一個 Node.js 應用映像檔,讓你輕鬆掌握環境部署的自動化流程。
Thumbnail
2025/10/17
Docker 儼然已成為軟體開發與部署的標準工具。而 Dockerfile 作為自動化建構映像檔的關鍵腳本,更是不可或缺。本文將帶你深入瞭解 Dockerfile 的基本結構、常用指令,並透過實際範例,從零開始建構一個 Node.js 應用映像檔,讓你輕鬆掌握環境部署的自動化流程。
Thumbnail
2025/10/14
路由器和交換器在建立網路時都扮演著關鍵角色,但功能截然不同。本文將深入解析兩者的職責、如何正確連接,以及在何種情況下需要額外添購交換器,幫助您打造更穩定、安全的家庭或辦公室網路。
Thumbnail
2025/10/14
路由器和交換器在建立網路時都扮演著關鍵角色,但功能截然不同。本文將深入解析兩者的職責、如何正確連接,以及在何種情況下需要額外添購交換器,幫助您打造更穩定、安全的家庭或辦公室網路。
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
在資料分析過程中,透過衡量變數之間的線性或非線性關係,能有效探索數據集,篩選出重要特徵,並進行預測建模。本文介紹瞭如何理解數據、使用相關矩陣找出變數關聯性,以及利用互資訊評估變數之間的依賴程度,幫助資料科學家在建模過程中選擇適當的變數,提升模型效果。
Thumbnail
在資料分析過程中,透過衡量變數之間的線性或非線性關係,能有效探索數據集,篩選出重要特徵,並進行預測建模。本文介紹瞭如何理解數據、使用相關矩陣找出變數關聯性,以及利用互資訊評估變數之間的依賴程度,幫助資料科學家在建模過程中選擇適當的變數,提升模型效果。
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
本文介紹了在進行資料分析時,將類別欄位轉換為數值欄位的方法,包括Label Encoding、One-Hot Encoding、Binary Encoding、Target Encoding和Frequency Encoding。每種方法的應用範例、優缺點和適用場景都有詳細說明。
Thumbnail
本文介紹了在進行資料分析時,將類別欄位轉換為數值欄位的方法,包括Label Encoding、One-Hot Encoding、Binary Encoding、Target Encoding和Frequency Encoding。每種方法的應用範例、優缺點和適用場景都有詳細說明。
Thumbnail
在這篇教學文章中,我們將展示如何使用 Python 和 pytrends 套件來取得 Google 趨勢(Google Trends)的熱門關鍵詞。我們會詳細說明如何安裝和設定 pytrends,並提供範例程式碼來幫助你輕鬆獲取台灣地區的熱門搜尋趨勢。
Thumbnail
在這篇教學文章中,我們將展示如何使用 Python 和 pytrends 套件來取得 Google 趨勢(Google Trends)的熱門關鍵詞。我們會詳細說明如何安裝和設定 pytrends,並提供範例程式碼來幫助你輕鬆獲取台灣地區的熱門搜尋趨勢。
Thumbnail
本文介紹了如何使用資料樞紐分析的功能來整理所需的資料,並設定圖表的中文字型,最後提供了繪圖的程式碼範例。
Thumbnail
本文介紹了如何使用資料樞紐分析的功能來整理所需的資料,並設定圖表的中文字型,最後提供了繪圖的程式碼範例。
Thumbnail
EasyOCR是一個能夠幫助你對圖片中的文字進行辨識的工具,透過進階分析,可以應用在文件掃描、自動化數據輸入、發票掃描等領域。本章節將介紹如何安裝、引用模型、進行文字辨識、以及辨識結果的分析。透過學習,你可以建立屬於自己的文字辨識系統。
Thumbnail
EasyOCR是一個能夠幫助你對圖片中的文字進行辨識的工具,透過進階分析,可以應用在文件掃描、自動化數據輸入、發票掃描等領域。本章節將介紹如何安裝、引用模型、進行文字辨識、以及辨識結果的分析。透過學習,你可以建立屬於自己的文字辨識系統。
Thumbnail
如何用Python為某欄做分類,例如:判斷分數是否及格 
Thumbnail
如何用Python為某欄做分類,例如:判斷分數是否及格 
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News