elasticsearch自定義動態映射


https://www.elastic.co/guide/cn/elasticsearch/guide/current/custom-dynamic-mapping.html
如果你想在運行時增加新的字段,你可能會啟用動態映射。 然而,有時候,動態映射 規則 可能不太智能。幸運的是,我們可以通過設置去自定義這些規則,以便更好的適用於你的數據。
日期檢測
當 Elasticsearch 遇到一個新的字符串字段時,它會檢測這個字段是否包含一個可識別的日期,比如 2014-01-01 。 如果它像日期,這個字段就會被作為 date 類型添加。否則,它會被作為 string 類型添加。
有些時候這個行為可能導致一些問題。想象下,你有如下這樣的一個文檔:
{ "note": "2014-01-01" }
假設這是第一次識別 note 字段,它會被添加為 date 字段。但是如果下一個文檔像這樣:
{ "note": "Logged out" }
這顯然不是一個日期,但為時已晚。這個字段已經是一個日期類型,這個 不合法的日期 將會造成一個異常。
日期檢測可以通過在根對象上設置 date_detection 為 false 來關閉:

PUT /my_index
{
    "mappings": {
        "my_type": {
            "date_detection": false
        }
    }
}

使用這個映射,字符串將始終作為 string 類型。如果你需要一個 date 字段,你必須手動添加。
Elasticsearch 判斷字符串為日期的規則可以通過 dynamic_date_formats setting 來設置。

動態模板
使用 dynamic_templates ,你可以完全控制 新檢測生成字段的映射。你甚至可以通過字段名稱或數據類型來應用不同的映射。
每個模板都有一個名稱, 你可以用來描述這個模板的用途, 一個 mapping 來指定映射應該怎樣使用,以及至少一個參數 (如 match) 來定義這個模板適用於哪個字段。
模板按照順序來檢測;第一個匹配的模板會被啟用。例如,我們給 string 類型字段定義兩個模板:
es :以 _es 結尾的字段名需要使用 spanish 分詞器。
en :所有其他字段使用 english 分詞器。
我們將 es 模板放在第一位,因為它比匹配所有字符串字段的 en 模板更特殊:

PUT /my_index
{
    "mappings": {
        "my_type": {
            "dynamic_templates": [
                { "es": {
                      "match":              "*_es", 
                      "match_mapping_type": "string",
                      "mapping": {
                          "type":           "string",
                          "analyzer":       "spanish"
                      }
                }},
                { "en": {
                      "match":              "*", 
                      "match_mapping_type": "string",
                      "mapping": {
                          "type":           "string",
                          "analyzer":       "english"
                      }
                }}
            ]
}}}

1.匹配字段名以 _es 結尾的字段。
2.匹配其他所有字符串類型字段。
match_mapping_type 允許你應用模板到特定類型的字段上,就像有標准動態映射規則檢測的一樣, (例如 string 或 long)。
match 參數只匹配字段名稱, path_match 參數匹配字段在對象上的完整路徑,所以 address.*.name 將匹配這樣的字段:

{
    "address": {
        "city": {
            "name": "New York"
        }
    }
}

 


免責聲明!

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



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