ElasticSearch 動(dòng)態(tài)映射實(shí)戰(zhàn)詳解
什么是動(dòng)態(tài)映射
通俗的講,就是文檔中的字段類(lèi)型可以由ES動(dòng)態(tài)識(shí)別,無(wú)需在創(chuàng)建索引的時(shí)候規(guī)定字段的類(lèi)型。
比如在項(xiàng)目中,如果不確定字段數(shù)據(jù)類(lèi)型的情況下,可以使用動(dòng)態(tài)映射,ES可以利用動(dòng)態(tài)映射來(lái)決定該字段的類(lèi)型,并自動(dòng)把該字段添加到映射中。
在使用的時(shí)候要結(jié)合實(shí)際業(yè)務(wù)來(lái)考慮,如果將 ES 當(dāng)作主要的數(shù)據(jù)存儲(chǔ)使用,并且希望出現(xiàn)未知字段時(shí)拋出異常,那么開(kāi)啟動(dòng)態(tài) mapping 并不適用。
***在不確定索引類(lèi)型字段時(shí),可以先創(chuàng)建臨時(shí)索引,然后存儲(chǔ)數(shù)據(jù),查詢(xún)映射。再刪除臨時(shí)索引。這樣就得到數(shù)據(jù)的基本映射了,可以在其上做精細(xì)化修改。 ***
映射規(guī)則
null沒(méi)有字段被添加true or falseboolean 類(lèi)型浮點(diǎn)類(lèi)型數(shù)字float 類(lèi)型數(shù)字long 類(lèi)型JSON 對(duì)象object 類(lèi)型數(shù)組由數(shù)組中第一個(gè)非空值決定string有可能是 date 類(lèi)型(若開(kāi)啟日期檢測(cè))、double 或 long 類(lèi)型、text 類(lèi)型、keyword 類(lèi)型
在 mapping 中可以通過(guò) dynamic 設(shè)置來(lái)控制是否自動(dòng)新增字段,接受以下參數(shù):
- true:默認(rèn)值為 true,自動(dòng)添加字段。
- false:忽略新的字段。
- strict:嚴(yán)格模式,發(fā)現(xiàn)新的字段拋出異常。
日期規(guī)則
es中當(dāng)字符串的格式為:yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z時(shí),es動(dòng)態(tài)模板會(huì)自動(dòng)認(rèn)為該字符串為日志類(lèi)型
- 可以通過(guò)
date_detection來(lái)關(guān)閉日期模板匹配 - 可以通過(guò)
dynamic_date_formats來(lái)指定日期字符匹配模板
PUT my_index
{
"mappings": {
"dynamic_date_formats": ["MM/dd/yyyy"]
}
}
數(shù)字檢測(cè)
動(dòng)態(tài)映射有時(shí)會(huì)將數(shù)字映射為字符串類(lèi)型,可以通過(guò)開(kāi)啟數(shù)字檢測(cè)來(lái)解決該問(wèn)題
PUT my_index
{
"mappings": {
"numeric_detection": true
}
}
動(dòng)態(tài)映射模板
定義動(dòng)態(tài)映射模板,來(lái)格式化動(dòng)態(tài)映射的規(guī)則,動(dòng)態(tài)映射模板包含以下關(guān)鍵字:
match_mapping_type:用來(lái)匹配當(dāng)前映射的字段類(lèi)型??梢岳斫鉃?,當(dāng)字段類(lèi)型為match_mapping_type時(shí)match、unmatch 、match_pattern:用來(lái)匹配當(dāng)前映射字段的名稱(chēng)??梢岳斫鉃?,當(dāng)字段名稱(chēng)匹配match、match_pattern時(shí),當(dāng)字段名稱(chēng)不匹配unmatch時(shí)path_match、path_unmatch:用來(lái)匹配當(dāng)前映射字段的路徑,通常用來(lái)匹配嵌套字段??梢岳斫鉃?,當(dāng)字段路徑為path_match時(shí),當(dāng)字段路徑不匹配path_unmatch時(shí){name}, {dynamic_type}:用來(lái)進(jìn)行占位符匹配,具體怎么用,都可以,但是最終映射的值為name或動(dòng)態(tài)類(lèi)型 當(dāng)然也可以直接強(qiáng)制指定類(lèi)型和屬性
下面看一些示例:
match_mapping_type
dynamic_templates是動(dòng)態(tài)模板名稱(chēng),什么字段都可以。integers與strings時(shí)動(dòng)態(tài)模板項(xiàng)名稱(chēng)
PUT my_index
{
"mappings": {
"dynamic_templates": [
{
"integers": {
"match_mapping_type": "long",
"mapping": {
"type": "integer"
}
}
},
{
"strings": {
"match_mapping_type": "string",
"mapping": {
"type": "text",
"fields": {
"raw": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
]
}
}
match、unmatch
PUT my_index
{
"mappings": {
"dynamic_templates": [
{
"longs_as_strings": {
"match": "long_*",
"unmatch": "*_text",
"mapping": {
"type": "long"
}
}
}
]
}
}
match_pattern
{
"mappings": {
"dynamic_templates": [
{
"longs_as_strings": {
"match_pattern": "regex",
"match": "^profit_\d+$",
"unmatch": "*_text",
"mapping": {
"type": "long"
}
}
}
]
}
}
path_match、path_unmatch
{
"mappings": {
"dynamic_templates": [
{
"full_name": {
"path_match": "name.*",
"path_unmatch": "*.middle",
"mapping": {
"type": "text",
"copy_to": "full_name"
}
}
}
]
}
}
{name}、{dynamic_type}
{
"mappings": {
"dynamic_templates": [
{
"named_analyzers": {
"match_mapping_type": "string",
"match": "*",
"mapping": {
"type": "text",
"analyzer": "{name}"
}
}
},
{
"no_doc_values": {
"match_mapping_type":"*",
"mapping": {
"type": "{dynamic_type}",
"doc_values": false
}
}
}
]
}
}
直接指定類(lèi)型
{
"mappings": {
"dynamic_templates": [
{
"strings_as_keywords": {
"match_mapping_type": "string",
"mapping": {
"type": "keyword"
}
}
}
]
}
}
索引模板
索引模板的作用是提前創(chuàng)建好模板,后續(xù)索引的創(chuàng)建會(huì)根據(jù)匹配規(guī)則,自動(dòng)生成該索引的配置
- 模板只在索引創(chuàng)建時(shí)起作用,修改模板不會(huì)影響已創(chuàng)建的索引。
- 可以設(shè)置多個(gè)索引模板,這些設(shè)置會(huì)被
merge在一起。 - 可以設(shè)置
order的數(shù)值,控制merge的過(guò)程。
當(dāng)一個(gè)索引被創(chuàng)建時(shí),如果符合多個(gè)模板,那么模板之間merge符合以下規(guī)則:
order值高的模板會(huì)覆蓋order值低的模板。- 相同字段會(huì)覆蓋
- 不同字段會(huì)疊加
感興趣的同學(xué),可以自行去查詢(xún)相關(guān)文檔,這個(gè)不是很常用
結(jié)束語(yǔ)
本節(jié)主要講了ES中的動(dòng)態(tài)mapping概念以及它的相關(guān)屬性。下節(jié)給大家講ES中文檔相關(guān)的API操作。
以上就是ElasticSearch 動(dòng)態(tài)映射實(shí)戰(zhàn)詳解的詳細(xì)內(nèi)容,更多關(guān)于ElasticSearch 動(dòng)態(tài)映射的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Elasticsearch學(xué)習(xí)之Terms?set?查詢(xún)
- ElasticSearch學(xué)習(xí)之Es索引Api操作
- ElasticSearch學(xué)習(xí)之Es集群Api操作示例
- ElasticSearch學(xué)習(xí)之ES Mapping實(shí)戰(zhàn)示例
- ElasticSearch學(xué)習(xí)之文檔API相關(guān)操作
- Elasticsearch?計(jì)數(shù)分詞中的token使用實(shí)例
- Elasticsearch?percolate?查詢(xún)示例詳解
- ElasticSearch學(xué)習(xí)之多條件組合查詢(xún)驗(yàn)證及示例分析
相關(guān)文章
MybatisPlus的LambdaQueryWrapper用法詳解
LambdaQueryWrapper<Tag>?是 MyBatis-Plus 框架中的一個(gè)功能強(qiáng)大的查詢(xún)構(gòu)造器,它用于構(gòu)建 SQL 查詢(xún)條件,具有一定的參考價(jià)值,感興趣的可以了解一下2024-10-10
SpringBoot 如何實(shí)時(shí)刷新靜態(tài)文件
這篇文章主要介紹了SpringBoot如何實(shí)時(shí)刷新靜態(tài)文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Java int與integer的對(duì)比區(qū)別
這篇文章主要介紹了Java int與integer的對(duì)比區(qū)別的相關(guān)資料,需要的朋友可以參考下2017-01-01
idea 實(shí)現(xiàn)縱列選擇和大小寫(xiě)轉(zhuǎn)換操作
這篇文章主要介紹了idea 實(shí)現(xiàn)縱列選擇和大小寫(xiě)轉(zhuǎn)換操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
Java Web中常用的分頁(yè)組件(Java端實(shí)現(xiàn))
本文通過(guò)使用場(chǎng)景分析給大家介紹了Java Web中常用的分頁(yè)組件(Java端實(shí)現(xiàn)),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-05-05
在Java中使用redisTemplate操作緩存的方法示例
這篇文章主要介紹了在Java中使用redisTemplate操作緩存的方法示例,在Redis中可以存儲(chǔ)String、List、Set、Hash、Zset。感興趣的可以了解一下2019-01-01

