![](/img/trans.png)
[英]How to update an existing document inside an ElasticSearch index using NEST?
[英]ElasticSearch: How to update a document type in an existing index
長話短說:
我創建了一個嚴格的模板,創建了幾個每日索引並更改了模板中的一種文檔類型( %_level類型從float到integer )。
之后,我創建了其余的每日指數。
問題:
我需要將舊索引中的文檔類型( %_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"
}
}
}
}
}
使用此模板創建了多個索引。
一段時間后,我意識到我們需要將%_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類型是整數。
但是舊索引包含%_level為浮點數的索引,而新索引包含%_level為整數。
我需要將舊索引%_level從浮點數轉換為整數,以便我可以構建包含所有索引的報告。
如何將舊索引中的%_level從float更改為integer ?
盡管您可以通過提供文檔 ID 從現有索引中添加和刪除文檔名稱,但如果您想更新文檔類型並將其應用於所有索引文檔,則這樣做是有問題的。
這個問題的一個很好的解決方案是重新索引。
重要的:
重新索引過程可以隱式轉換某些類型( 數字類型轉換)和顯式轉換其他類型。
如果您需要隱式轉換,您可以跳過第 2 節
意思是,對所有舊索引應用以下內容(例如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.