在 Elasticsearch 中,字段的映射定義了字段的類型及其行為。你提供的 content_answer 字段映射如下:
Json
深色版本
"content_answer": {
? "type": "text",
? "fields": {
? ? "keyword": {
? ? ? "type": "keyword",
? ? ? "ignore_above": 256
? ? }
? }
}
這個映射的含義可以分解為以下幾個部分進行解釋:
1. 主字段:content_answer
"type": "text":
表示 content_answer 是一個全文搜索字段。
text 類型的字段會被分詞器(Analyzer)處理,分割成多個詞條(tokens),用于全文搜索。
例如,如果字段值是 "這是測試文本",分詞器可能會將其分割為 ["這是", "測試", "文本"]。
默認情況下,text 類型字段使用標準分詞器(Standard Analyzer)。如果未指定分詞器,Elasticsearch 會根據字段內容的語言自動選擇合適的分詞器。
2. 子字段:content_answer.keyword
"fields":
定義了一個或多個人字段(sub-fields),這些子字段共享主字段的數據,但具有不同的行為或用途。
在這里,content_answer 定義了一個名為 keyword 的子字段。
"type": "keyword":
表示 content_answer.keyword 是一個精確匹配字段。
keyword 類型的字段不會被分詞器處理,而是將整個字段值作為一個整體存儲。
適用于精確匹配、排序和聚合操作。
"ignore_above": 256:
表示如果字段值的長度超過 256 個字符,則該字段值將被忽略,不會被索引。
這是為了避免對過長的字段值進行索引,從而節省存儲空間并提高性能。
注意:這里的長度是指字符數(UTF-8 編碼下的字符數),而不是字節數。
3. 使用場景
(1) 全文搜索
主字段 content_answer 用于全文搜索。
例如,查詢關鍵字 "測試" 可以匹配到字段值 "這是測試文本",因為分詞器會將 "這是測試文本" 分割為 ["這是", "測試", "文本"]。
(2) 精確匹配
子字段 content_answer.keyword 用于精確匹配。
例如,查詢字段值 "這是測試文本" 只能匹配到完全相同的字段值,而不能匹配到部分匹配的內容。
(3) 排序和聚合
keyword 類型的字段支持排序和聚合操作。
例如,可以按 content_answer.keyword 對文檔進行排序,或者對 content_answer.keyword 的值進行計數統計。
4. 示例
假設索引中有一條文檔:
Json
深色版本
{
? "content_answer": "這是測試文本"
}
(1) 查詢全文搜索字段
執行以下查詢時,content_answer 會參與全文搜索:
Json
深色版本
POST your_index_name/_search
{
? "query": {
? ? "match": {
? ? ? "content_answer": "測試"
? ? }
? }
}
查詢邏輯:分詞器會將 "測試" 分割為單個詞條,并與 content_answer 的分詞結果進行匹配。
(2) 查詢精確匹配字段
執行以下查詢時,content_answer.keyword 會參與精確匹配:
Json
深色版本
POST your_index_name/_search
{
? "query": {
? ? "term": {
? ? ? "content_answer.keyword": "這是測試文本"
? ? }
? }
}
查詢邏輯:只有字段值完全等于 "這是測試文本" 的文檔才會被匹配。
(3) 聚合操作
執行以下聚合操作時,content_answer.keyword 會參與聚合:
Json
深色版本
POST your_index_name/_search
{
? "size": 0,
? "aggs": {
? ? "content_stats": {
? ? ? "terms": {
? ? ? ? "field": "content_answer.keyword"
? ? ? }
? ? }
? }
}
聚合邏輯:統計 content_answer.keyword 的不同值出現的次數。
5. 總結
主字段 content_answer:
類型為 text,用于全文搜索。
值會被分詞器處理,適合模糊匹配。
子字段 content_answer.keyword:
類型為 keyword,用于精確匹配、排序和聚合。
值不會被分詞器處理,適合精確匹配和結構化操作。
通過這種多字段映射設計,Elasticsearch 提供了靈活性,允許同一個字段同時支持全文搜索和精確匹配等不同場景。