您好,登錄后才能下訂單哦!
本篇內容介紹了“如何理解ElasticSearch動態映射與靜態映射”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
動態映射
顧名思義,就是自動創建出來的映射。es 根據存入的文檔,自動分析出來文檔中字段的類型以及存儲方式,這種就是動態映射。
舉一個簡單例子,新建一個索引,然后查看索引信息:
在創建好的索引信息中,可以看到,mappings 為空,這個 mappings 中保存的就是映射信息。
現在我們向索引中添加一個文檔,如下:
PUT blog/_doc/1
{
"title":"1111",
"date":"2020-11-11"
}
文檔添加成功后,就會自動生成 Mappings:
可以看到,date 字段的類型為 date,title 的類型有兩個,text 和 keyword。
默認情況下,文檔中如果新增了字段,mappings 中也會自動新增進來。
有的時候,如果希望新增字段時,能夠拋出異常來提醒開發者,這個可以通過 mappings 中 dynamic 屬性來配置。
dynamic 屬性有三種取值:
具體配置方式如下,創建索引時指定 mappings(這其實就是靜態映射):
PUT blog
{
"mappings": {
"dynamic":"strict",
"properties": {
"title":{
"type": "text"
},
"age":{
"type":"long"
}
}
}
}
然后向 blog 中索引中添加數據:
PUT blog/_doc/2
{
"title":"1111",
"date":"2020-11-11",
"age":99
}
在添加的文檔中,多出了一個 date 字段,而該字段沒有預定義,所以這個添加操作就回報錯:
{
"error" : {
"root_cause" : [
{
"type" : "strict_dynamic_mapping_exception",
"reason" : "mapping set to strict, dynamic introduction of [date] within [_doc] is not allowed"
}
],
"type" : "strict_dynamic_mapping_exception",
"reason" : "mapping set to strict, dynamic introduction of [date] within [_doc] is not allowed"
},
"status" : 400
}
動態映射還有一個日期檢測的問題。
例如新建一個索引,然后添加一個含有日期的文檔,如下:
PUT blog/_doc/1
{
"remark":"2020-11-11"
}
添加成功后,remark 字段會被推斷是一個日期類型。
此時,remark 字段就無法存儲其他類型了。
PUT blog/_doc/1
{
"remark":"javaboy"
}
此時報錯如下:
{
"error" : {
"root_cause" : [
{
"type" : "mapper_parsing_exception",
"reason" : "failed to parse field [remark] of type [date] in document with id '1'. Preview of field's value: 'javaboy'"
}
],
"type" : "mapper_parsing_exception",
"reason" : "failed to parse field [remark] of type [date] in document with id '1'. Preview of field's value: 'javaboy'",
"caused_by" : {
"type" : "illegal_argument_exception",
"reason" : "failed to parse date field [javaboy] with format [strict_date_optional_time||epoch_millis]",
"caused_by" : {
"type" : "date_time_parse_exception",
"reason" : "Failed to parse with all enclosed parsers"
}
}
},
"status" : 400
}
要解決這個問題,可以使用靜態映射,即在索引定義時,將 remark 指定為 text 類型。也可以關閉日期檢測。
PUT blog
{
"mappings": {
"date_detection": false
}
}
此時日期類型就回當成文本來處理。
靜態映射
略。
es 中動態映射類型推斷方式如下:
“如何理解ElasticSearch動態映射與靜態映射”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。