簡體   English   中英

ElasticSearch:如何更新現有索引中的文檔類型

[英]ElasticSearch: How to update a document type in an existing index

長話短說:

我創建了一個嚴格的模板,創建了幾個每日索引並更改了模板中的一種文檔類型( %_level類型從floatinteger )。

之后,我創建了其余的每日指數。

問題:

我需要將舊索引中的文檔類型( %_level類型從float更改為integer )以與新索引兼容。 我怎樣才能做到這一點?

現在了解詳情...

我有以下嚴格的模板:

PUT _template/example-template
{
    "order":0,
    "version":200,
    "index_patterns":["example-*"],
    "settings":{
        "index":{
            "number_of_shards":4
         }
    },
    "mappings": {
        "iterations": {
            "dynamic":"strict",
            "properties": {
                "%_average1": {
                    "type":"float"
                },
                "%_average2": {
                    "type":"float"
                },
                "sum": {
                    "type":"integer"
                },
                "%_level": {
                    "type":"float"
                }
            }
        }
    }
}

使用此模板創建了多個索引。

  • 示例-20191220
  • 示例-20191221
  • 示例-20191222
  • 示例-20191223

一段時間后,我意識到我們需要將%_level類型從float更改為integer ,因此我將模板更改為以下內容:

PUT _template/example-template
{
    "order":0,
    "version":200,
    "index_patterns":["example-*"],
    "settings":{
        "index":{
            "number_of_shards":4
         }
    },
    "mappings": {
        "iterations": {
            "dynamic":"strict",
            "properties": {
                "%_average1": {
                    "type":"float"
                },
                "%_average2": {
                    "type":"float"
                },
                "sum": {
                    "type":"integer"
                },
                "%_level": {
                    "type":"integer"
                }
            }
        }
    }
}

現在創建了以下索引,其中%_level類型是整數

  • 示例-20192412
  • 示例-20192512
  • 示例-20192612

但是舊索引包含%_level浮點數的索引,而新索引包含%_level整數

我需要將舊索引%_level浮點數轉換為整數,以便我可以構建包含所有索引的報告。

如何將舊索引中的%_levelfloat更改為integer

盡管您可以通過提供文檔 ID 從現有索引中添加和刪除文檔名稱,但如果您想更新文檔類型並將其應用於所有索引文檔,則這樣做是有問題的。

這個問題的一個很好的解決方案是重新索引。

重要的:

重新索引過程可以隱式轉換某些類型( 數字類型轉換)和顯式轉換其他類型。

如果您需要隱式轉換,您可以跳過第 2 節

意思是,對所有舊索引應用以下內容(例如example-20191220 ):

  1. example-20191220創建一個名為example-20191220-new的新索引
  2. 在創建過程中添加一個輕松的腳本,將%_level類型從浮點數轉換為整數
  3. 刪除舊索引示例-20191220
  4. example-20191220-new重新索引為example-20191220

現在,'updated' 索引example-20191220具有正確的%_level類型。

第 2 節中的重新索引應如下所示:

(它在Kibana Dev Tools上執行和測試)

POST _reindex
{
    "source": {
        "index": "example-20191220"
    },
    "dest": {
        "index": "example-20191220-new"
    },
    "script": {
    "lang": "painless", 
    "source": 
        """
        Double num = ctx._source['%_level'];
        if(num != null)
        { ctx._source['%_level'] = num.intValue(); }
        """
    }
}

第 4 節中的重新索引應如下所示:

(它在Kibana Dev Tools上執行和測試)

POST _reindex
{
    "source": {
        "index": "example-20191220-new"
    },
    "dest": {
        "index": "example-20191220"
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM