国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

elasticsearch中文檔映射Mapping用法詳解

這篇具有很好參考價值的文章主要介紹了elasticsearch中文檔映射Mapping用法詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Mapping類似數(shù)據(jù)庫中的schema的定義,作用如下:

  • 定義索引中的字段的名稱
  • 定義字段的數(shù)據(jù)類型,例如字符串,數(shù)字,布爾等
  • 字段,倒排索引的相關(guān)配置(Analyzed or Not Analyzed,Analyzer)

ES中Mapping映射可以分為動態(tài)映射和靜態(tài)映射。

動態(tài)映射:

????????在關(guān)系數(shù)據(jù)庫中,需要事先創(chuàng)建數(shù)據(jù)庫,然后在該數(shù)據(jù)庫下創(chuàng)建數(shù)據(jù)表,并創(chuàng)建表字段、類型、長度、主鍵等,最后才能基于表插入數(shù)據(jù)。而Elasticpearch中不需要定義Mapping映射(即關(guān)系型數(shù)據(jù)庫的表、字段等),在文檔寫入Elasticsearch時,會根據(jù)文檔字段自動識別類型,這種機(jī)制稱之為動態(tài)映射。

????????動態(tài)映射(Dynamic Mapping)的機(jī)制,使得我們無需手動定義Mappings,Elasticsearch會自動根據(jù)文檔信息,推算出字段的類型。但是有時候會推算的不對,例如地理位置信息。當(dāng)類型如果設(shè)置不對時,會導(dǎo)致一些功能無法正常運(yùn)行,例如Range查詢

靜態(tài)映射:

????????靜態(tài)映射是在Elasticsearch中也可以事先定義好映射,包含文檔的各字段類型、分詞器等,這種方式稱之為靜態(tài)映射。

Dynamic Mapping類型自動識別:

JSON類型 ElasticSearch類型
字符串?
  • 匹配日期格式,設(shè)置為Date
  • 匹配數(shù)字設(shè)置為float或者long,該選項默認(rèn)關(guān)閉
  • 設(shè)置為Text,并且增加keyword字段
布爾值 boolean
浮點數(shù) float
整數(shù) long
對象 Object
數(shù)組 由第一個非空數(shù)值的類型所決定
空值 忽略

動態(tài)映射:

創(chuàng)建文檔(es根據(jù)數(shù)據(jù)類型,會自動創(chuàng)建映射)

# 創(chuàng)建文檔(es根據(jù)數(shù)據(jù)類型,會自動創(chuàng)建映射)
PUT /user/_doc/1
{
  "name": "張三",
  "age": 26,
  "address": "北京市朝陽區(qū)"
}

運(yùn)行結(jié)果:

{
  "_index" : "user",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

獲取文檔映射

# 獲取文檔映射
GET /user/_mapping

運(yùn)行結(jié)果:

{
  "user" : {
    "mappings" : {
      "properties" : {
        "address" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "age" : {
          "type" : "long"
        },
        "name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}

Mapping一旦建立后,那后期是否還可以更新或者修改Mapping字段類型信息呢?

情況一:新增加字段

  • dynamic設(shè)為true時,一旦有新增字段的文檔寫入,Mapping 也同時被更新
  • dynamic設(shè)為false,Mapping 不會被更新,新增字段的數(shù)據(jù)無法被索引,但是信息會出現(xiàn)在_source中
  • dynamic設(shè)置成strict(嚴(yán)格控制策略),文檔寫入失敗,拋出異常

es mapping,ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎

情況二:對于已有字段,一旦已經(jīng)有數(shù)據(jù)寫入,就不再支持修改字段定義

  • Lucene實現(xiàn)的倒排索引,—旦生成后,就不允許修改
  • 如果希望改變字段類型,必須Reindex API,重建索引

????????如果修改了字段的數(shù)據(jù)類型,會導(dǎo)致已被索引的數(shù)據(jù)無法被搜索;但是如果是增加新的字段,就不會有這樣的影響。

首先新建mapping信息:

PUT user2
{
  "mappings": {
    "dynamic": "strict",
    "properties": {
      "name": {
        "type": "text"
      },
      "address": {
        "type": "object",
        "dynamic": "true"
      }
    }
  }
}

運(yùn)行結(jié)果:

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "user2"
}

插入新的文檔,原因為age為新增字段報錯,拋出異常,之前mapping中dynamic設(shè)置的為strict

# 插入新的文檔,原因為age為新增字段報錯,拋出異常,之前mapping中dynamic設(shè)置的為strict
PUT user2/_doc/1
{
  "name": "張三",
  "age": 26,
  "address": {
    "provienc": "北京市",
    "city": "北京市"
  }
}

運(yùn)行結(jié)果:

{
  "error" : {
    "root_cause" : [
      {
        "type" : "strict_dynamic_mapping_exception",
        "reason" : "mapping set to strict, dynamic introduction of [age] within [_doc] is not allowed"
      }
    ],
    "type" : "strict_dynamic_mapping_exception",
    "reason" : "mapping set to strict, dynamic introduction of [age] within [_doc] is not allowed"
  },
  "status" : 400
}

接下來修改dynamic信息,更改為true后再次執(zhí)行上面的語句:

# 修改mapping信息
PUT user2/_mapping
{
  "dynamic": "true"
}

運(yùn)行結(jié)果:

{
  "acknowledged" : true
}

dynamic修改為true后,再次插入一個新的文檔

# dynamic修改為true后,再次插入一個新的文檔
PUT user2/_doc/1
{
  "name": "張三",
  "age": 26,
  "address": {
    "provienc": "北京市",
    "city": "北京市"
  }
}

運(yùn)行結(jié)果:

{
  "_index" : "user2",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

添加新字段后,再次查詢mapping信息

# 添加新字段后,再次查詢mapping信息
GET user2/_mapping

運(yùn)行結(jié)果:? 【可以看出新增加了age字段的信息】

{
  "user2" : {
    "mappings" : {
      "dynamic" : "true",
      "properties" : {
        "address" : {
          "dynamic" : "true",
          "properties" : {
            "city" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "provienc" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            }
          }
        },
        "age" : {
          "type" : "long"
        },
        "name" : {
          "type" : "text"
        }
      }
    }
  }
}

對已經(jīng)存在的mapping映射進(jìn)行修改:

具體方法:

  1. 如果要推倒現(xiàn)有的映射,你得重新建立—個靜態(tài)索引
  2. 然后把之前索引里的數(shù)據(jù)導(dǎo)入到新的索引里
  3. 刪除原創(chuàng)建的索引
  4. 為新索引起個別名,為原索引名

注意:通過上述4個步驟實現(xiàn)了索引的平滑過渡,并且是零停機(jī)!

1.重新創(chuàng)建一個靜態(tài)索引,并將數(shù)據(jù)遷移到新索引中

# 重新創(chuàng)建一個靜態(tài)索引
POST _reindex
{
  "source": {
    "index": "user2"
  },
  "dest": {
    "index": "new_user2"
  }
}

運(yùn)行結(jié)果:

{
  "took" : 185,
  "timed_out" : false,
  "total" : 1,
  "updated" : 0,
  "created" : 1,
  "deleted" : 0,
  "batches" : 1,
  "version_conflicts" : 0,
  "noops" : 0,
  "retries" : {
    "bulk" : 0,
    "search" : 0
  },
  "throttled_millis" : 0,
  "requests_per_second" : -1.0,
  "throttled_until_millis" : 0,
  "failures" : [ ]
}

2.查看新索引mapping信息

# 查看新索引mapping信息
GET new_user2/_mapping

運(yùn)行結(jié)果:? ?【新索引和舊索引mapping信息是相同的】

{
  "new_user2" : {
    "mappings" : {
      "properties" : {
        "address" : {
          "properties" : {
            "city" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "provienc" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            }
          }
        },
        "age" : {
          "type" : "long"
        },
        "name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}

3.查看新索引的數(shù)據(jù)信息

# 查看新索引的數(shù)據(jù)信息
GET new_user2/_search

運(yùn)行結(jié)果:? 【新索引已經(jīng)包含了舊索引所有的數(shù)據(jù)】

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "new_user2",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "張三",
          "age" : 26,
          "address" : {
            "provienc" : "北京市",
            "city" : "北京市"
          }
        }
      }
    ]
  }
}

4.刪除之前的舊索引

# 刪除舊索引
DELETE user2

運(yùn)行結(jié)果:

{
  "acknowledged" : true
}

5.為新索引起個別名,別名為舊索引的名稱

# 為新索引起別名
PUT new_user2/_alias/user2

運(yùn)行結(jié)果:

{
  "acknowledged" : true
}

注意:起別名前要確保別名不是已經(jīng)存在的索引,如果存在則報錯!這也是起別名之前先刪除舊索引的原因!?

6.查詢舊索引(即為新索引的別名)

# 查詢舊索引(即為新索引的別名)
GET user2

# 效果等同于 GETuser2
GET new_user2

運(yùn)行結(jié)果:

{
  "new_user2" : {
    "aliases" : {
      "user2" : { }
    },
    "mappings" : {
      "properties" : {
        "address" : {
          "properties" : {
            "city" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "provienc" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            }
          }
        },
        "age" : {
          "type" : "long"
        },
        "name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "1",
        "provided_name" : "new_user2",
        "creation_date" : "1667317074691",
        "number_of_replicas" : "1",
        "uuid" : "rvKsAyTKQeuc-bWklCW-8A",
        "version" : {
          "created" : "7170699"
        }
      }
    }
  }
}

注意:新起的別名是不能DELETE的!拋出異常!文章來源地址http://www.zghlxwxcb.cn/news/detail-596994.html

到了這里,關(guān)于elasticsearch中文檔映射Mapping用法詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 深入理解Elasticsearch的索引映射(mapping)

    當(dāng)我們談?wù)揈lasticsearch時,索引映射是一個核心概念,它定義了如何存儲和檢索數(shù)據(jù)。在Elasticsearch 7.6及更高版本中,映射提供了一系列強(qiáng)大的功能,使您能夠精確地控制數(shù)據(jù)的結(jié)構(gòu)和行為。本文將詳細(xì)介紹映射的關(guān)鍵屬性、用途以及如何正確設(shè)置和優(yōu)化它。 在Elasticsearch中,

    2024年02月22日
    瀏覽(39)
  • Elasticsearch學(xué)習(xí)-索引操作及Mapping映射

    在7.X版本前類似于關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)庫概念,8.X版本后刪除了type概念,索引類似于關(guān)系型數(shù)據(jù)庫中的表 相當(dāng)于關(guān)系型數(shù)據(jù)庫中的一條數(shù)據(jù),最小單元 每一個節(jié)點就是一個ES實例(一個java進(jìn)程),一個節(jié)點 != 一臺服務(wù)器 多個節(jié)點組成分布式系統(tǒng),ES原生分布式,已啟動一

    2023年04月22日
    瀏覽(23)
  • Elasticsearch:映射(mapping)的實用實踐指南

    Elasticsearch:映射(mapping)的實用實踐指南

    動態(tài)映射適用于開發(fā)環(huán)境,但對于生產(chǎn)級集群禁用它。 將動態(tài)配置為 “strict” 以對索引的字段值實施嚴(yán)格模式。有關(guān)動態(tài)映射的詳細(xì)描述,請閱讀文章 “Elasticsearch:Dynamic mapping”。 當(dāng)文檔大量存儲時,可以在定義字段映射時使用優(yōu)化來節(jié)省磁盤空間。 禁用強(qiáng)制(coerce)。

    2024年02月12日
    瀏覽(17)
  • Elasticsearch:Explicit mapping - 顯式映射

    Elasticsearch:Explicit mapping - 顯式映射

    顯式映射相比較動態(tài)映射(Dynamic mapping)是需要我們在索引創(chuàng)建時就定義字段及其類型。這個和我們傳統(tǒng)的 RDMS 數(shù)據(jù)庫一樣,在我們寫入數(shù)據(jù)到數(shù)據(jù)庫之前,我們需要工整地定義好每個字段及其類型和長度。Elasticsearch 既可以使用顯式映射也可以同時使用動態(tài)映射。在許多的

    2024年02月02日
    瀏覽(23)
  • ES mapping映射屬性_source、_all、store和index

    這個說的比較清楚 圖解Elasticsearch中的_source、_all、store和index屬性_esc_ai的博客-CSDN博客

    2024年02月15日
    瀏覽(16)
  • ES mapping 詳解

    ES mapping 詳解

    nested 類型??? _all _routing; ES-mapping Elasticsearch mapping_Aska小強(qiáng)的博客-CSDN博客 Mapping 類似 mysql 中的 schema 的定義,就是定義索引屬性字段的 定義索引中字段的名稱 定義索引中字段的數(shù)據(jù)類型 , 如 text , long , keyword.... 定義索引中字段的的倒排索引相關(guān)配置 ( Analyzer...) 一個Mappin

    2024年02月06日
    瀏覽(20)
  • Elasticsearch(ES)(版本7.x)創(chuàng)建索引報錯:Faile to parse mapping [_doc] Root mapping definition has unsupported

    Elasticsearch(ES)(版本7.x)創(chuàng)建索引報錯:Faile to parse mapping [_doc] Root mapping definition has unsupported

    Elasticsearch(ES)(版本7.x)創(chuàng)建索引報錯: 因es7.0版本之后不再需要type doc,把上面語句中的doc刪掉,再運(yùn)行就可以創(chuàng)建索引了。 如果還需要type doc則需要增加include_type_name=true即可解決。 示例:

    2024年02月16日
    瀏覽(20)
  • (4)Mapping(映射)

    映射是定義文檔及其包含的字段的存儲和索引方式的過程。 兩種映射方式 dynamic mapping(動態(tài)映射或自動映射) expllcit mapping(靜態(tài)映射或手工映射或顯示映射) Mapping數(shù)據(jù)類型 Mapping參數(shù) https://www.elastic.co/guide/en/elasticsearch/reference/7.10/removal-of-types.html Mapping 也稱之為映射,定義

    2024年02月01日
    瀏覽(17)
  • Mapping映射入門

    Mapping映射入門

    概念:自動或手動為index中的_doc建立的一種數(shù)據(jù)結(jié)構(gòu)和相關(guān)配置,簡稱為mapping映射。 插入幾條數(shù)據(jù),讓es自動為我們建立一個索引 對比數(shù)據(jù)庫建表語句 動態(tài)映射:dynamic mapping,自動為我們建立index,以及對應(yīng)的mapping,mapping中包含了每個field對應(yīng)的數(shù)據(jù)類型,以及如何分詞等

    2023年04月08日
    瀏覽(19)
  • 4. 對象映射 - Mapping.Mapster

    4. 對象映射 - Mapping.Mapster

    在項目中我們會經(jīng)常遇到對象的映射,比如像Model和Dto之間的映射,或者是對象的深拷貝,這些都是需要我們自己實現(xiàn)的。此時,項目中會出現(xiàn)很多初始化對象的代碼,這些代碼寫起來相當(dāng)?shù)目菰锓ξ叮敲从袥]有什么辦法減輕我們的工作量,使得我們可以把時間花費到業(yè)務(wù)

    2024年02月04日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包