elasticsearch 動態映射


https://www.elastic.co/guide/cn/elasticsearch/guide/current/dynamic-mapping.html#dynamic-mapping
當 Elasticsearch 遇到文檔中以前 未遇到的字段,它用 dynamic mapping 來確定字段的數據類型並自動把新的字段添加到類型映射。
有時這是想要的行為有時又不希望這樣。通常沒有人知道以后會有什么新字段加到文檔,但是又希望這些字段被自動的索引。也許你只想忽略它們。如果Elasticsearch是作為重要的數據存儲,可能就會期望遇到新字段就會拋出異常,這樣能及時發現問題。
幸運的是可以用 dynamic 配置來控制這種行為 ,可接受的選項如下:
true 動態添加新的字段--缺省
false 忽略新的字段,不會添加字段映射,但是會存在於_source中
strict 如果遇到新字段拋出異常
配置參數 dynamic 可以用在根 object 或任何 object 類型的字段上。你可以將 dynamic 的默認值設置為 strict , 而只在指定的內部對象中開啟它, 例如:

PUT /my_index
{
    "mappings": {
        "my_type": {
            "dynamic":      "strict",
            "properties": {
                "title":  { "type": "string"},
                "stash":  {
                    "type":     "object",
                    "dynamic":  true 
                }
            }
        }
    }
}


如果遇到新字段,對象 my_type 就會拋出異常。而內部對象 stash 遇到新字段就會動態創建新字段。
使用上述動態映射, 你可以給 stash 對象添加新的可檢索的字段:

PUT /my_index/my_type/1
{
    "title":   "This doc adds a new field",
    "stash": { "new_field": "Success!" }
}

但是對根節點對象 my_type 進行同樣的操作會失敗:

PUT /my_index/my_type/1
{
    "title":     "This throws a StrictDynamicMappingException",
    "new_field": "Fail!"
}

把 dynamic 設置為 false 一點兒也不會改變 _source 的字段內容。 _source 仍然包含被索引的整個JSON文檔。只是新的字段不會被加到映射中也不可搜索。

缺省映射
通常,一個索引中的所有類型共享相同的字段和設置。 _default_ 映射更加方便地指定通用設置,而不是每次創建新類型時都要重復設置。 _default_ 映射是新類型的模板。在設置 _default_ 映射之后創建的所有類型都將應用這些缺省的設置,除非類型在自己的映射中明確覆蓋這些設置。
例如,我們可以使用 _default_ 映射為所有的類型禁用 _all 字段, 而只在 blog 類型啟用:

PUT /my_index
{
    "mappings": {
        "_default_": {
            "_all": { "enabled":  false }
        },
        "blog": {
            "_all": { "enabled":  true  }
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM