ElasticSearch映射Mapping
1.1 什么是映射
(1) 映射(mapping): 定義index的元數據, 指定要索引并存儲的文檔的字段類型.
也就是說映射決定了Elasticsearch在建立倒排索引、進行檢索時對文檔采取的相關策略, 如數字類型、日期類型、文本類型等等.
需要注意的是:?檢索時用到的分析策略, 要和建立索引時的分析策略相同, 否則將導致數據不準確.
(2) ES對不同的類型有不同的存儲和檢索策略.
① 比如: 對full text型的數據類型(如text), 在索引時, 會經過各類處理 (包括分詞、normalization(時態轉換、同義詞轉換、大小寫轉換)等處理), 才會建立到索引數據中.
② 再比如: 對exact value(如date), 在索引的分詞階段, 會將整個value作為一個關鍵詞建立到倒排索引中.
1.2 映射的組成
每個index都有一?(至多)?個type, 每個type對應一個mapping.
在Elasticsearch 6.X版本開始, 1個index只能有1個type.
每個mapping都由下述部分組成:
① 元字段:?_index、_type、_id?和?_source.
② field/properties(字段或屬性):?同一index中, 同名的field的映射配置必須相同
a) 因為index是根據_type元字段來區分type的, 也就是存儲的每個文檔中都有_type等元字段, 如果相同名稱的field的映射(_type字段的值)不同, Elasticsearch在解析時就會出現沖突.
b) 這些參數可以例外:?copy_to、dynamic、enabled、ignore_above、include_in_all.
關于type的處理方法, 可以參考博客:?ES XX - Elasticsearch對type的處理(type的底層結構).
1.3 元字段
每個文檔都有與之關聯的元數據 —— ES內部為所有的文檔配備的field, 都是以下劃線_開頭的內置字段.
具體的內容請參考博文?ES XX - Elasticsearch的元字段?中詳細講解.
1.4 字段的類型
Elasticsearch中每個field都對應一至多個數據類型.
詳細的內容請參考博文?ES XX - Elasticsearch中字段的類型?中詳細講解.
?
什么是Mapping映射?
映射:創建索引的時候,可以預先定義字段的類型以及相關屬性。
作用:這樣會讓索引建立得更加的細致和完善!
分類:靜態映射和動態映射
ElasticSearch在做字段映射的時候可以定義的類型
映射的屬性方法
除了定義字段的類型,還可以給字段定義相關的屬性
?
?
?
?創建mapping
(1) 必讀說明:
① 創建mapping時, 可以指定每個field是否需要:
索 引:?"index": true?—— 默認配置
不索引:?"index": false
②?mapping root object:
每個type對應的mapping的JSON串, 包括properties, metadata(_id, _source, _type) , settings(analyzer) , 其他settings(如include_in_all)
(2) 創建mapping的示例:
?更新mapping
(1) 必讀說明:
-
映射一旦創建完成, 就不允許修改:
—— Elasticsearch對文檔的分析、存儲、檢索等過程, 都是嚴格按照mapping中的配置進行的. 如果允許后期修改mapping, 在檢索時對索引的處理將存在不一致的情況, 導致數據檢索行為不準確.
-
只能在創建index的時候手動配置mapping, 或者新增field mapping, 但是不能update field mapping.
(2) 更新mapping出現異常:
?
?
(3) 過期提示說明 —— 這里使用的是Elasticsearch 6.8.6版本:
① 是否索引的API已經做了修改, 若使用"analyzed" | "not_analyzed" | "yes" | "no"等, 將拋出如下警告:
#! Deprecation: Expected a boolean [true/false] for property [index] but got [not_analyzed] #! Deprecation: Expected a boolean [true/false] for property [index] but got [no]②?_all元字段也將在7.0版本中移除, 它建議我們使用copy_to定制自己的all field:
#! Deprecation: [_all] is deprecated in 6.0+ and will be removed in 7.0. As a replacement, you can use [copy_to] on mapping fields to create your own catch all field.在6.8.6版本中我們使用true或false
字段類型的設置,在6.8.6版本中使用text文本類型,不能使用string在過去早期的版本可以使用
?
?所以我們新增一個索引test
?
總結
以上是生活随笔為你收集整理的ElasticSearch映射Mapping的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sqlserver查询补全时间_mssq
- 下一篇: Leetcode_最后一个单词的长度