中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解ElasticSearch動態映射與靜態映射

發布時間:2021-10-23 17:07:05 來源:億速云 閱讀:511 作者:iii 欄目:編程語言

本篇內容介紹了“如何理解ElasticSearch動態映射與靜態映射”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

9.1 映射分類

動態映射

顧名思義,就是自動創建出來的映射。es 根據存入的文檔,自動分析出來文檔中字段的類型以及存儲方式,這種就是動態映射。

舉一個簡單例子,新建一個索引,然后查看索引信息:

如何理解ElasticSearch動態映射與靜態映射  
image-20201106201219878

在創建好的索引信息中,可以看到,mappings 為空,這個 mappings 中保存的就是映射信息。

現在我們向索引中添加一個文檔,如下:

PUT blog/_doc/1
{
  "title":"1111",
  "date":"2020-11-11"
}
 

文檔添加成功后,就會自動生成 Mappings:

如何理解ElasticSearch動態映射與靜態映射  
image-20201106201516427

可以看到,date 字段的類型為 date,title 的類型有兩個,text 和 keyword。

默認情況下,文檔中如果新增了字段,mappings 中也會自動新增進來。

有的時候,如果希望新增字段時,能夠拋出異常來提醒開發者,這個可以通過 mappings 中 dynamic 屬性來配置。

dynamic 屬性有三種取值:

  • true,默認即此。自動添加新字段。
  • false,忽略新字段。
  • strict,嚴格模式,發現新字段會拋出異常。

具體配置方式如下,創建索引時指定 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 字段會被推斷是一個日期類型。

如何理解ElasticSearch動態映射與靜態映射  
image-20201106203240406

此時,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
  }
}
 

此時日期類型就回當成文本來處理。

靜態映射

略。

 

9.2 類型推斷

es 中動態映射類型推斷方式如下:

如何理解ElasticSearch動態映射與靜態映射    

“如何理解ElasticSearch動態映射與靜態映射”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

惠州市| 三门县| 周至县| 理塘县| 建水县| 合山市| 鹰潭市| 老河口市| 高安市| 嘉定区| 黎川县| 门头沟区| 乃东县| 京山县| 镇宁| 襄城县| 凉山| 恩施市| 台江县| 乐东| 吉首市| 本溪| 临城县| 开封市| 鱼台县| 随州市| 万年县| 永嘉县| 柘荣县| 芜湖市| 皮山县| 南投县| 彝良县| 平乐县| 法库县| 富蕴县| 田阳县| 阿城市| 措美县| 黄浦区| 四会市|