[英]Elasticsearch - Reindex documents with stored / excluded fields
我有一個具有以下配置的索引映射:
"mappings" : {
"_source" : {
"excludes" : [
"special_field"
]
},
"properties" : {
"special_field" : {
"type" : "text",
"store" : true
},
}
}
因此,當使用此映射對新文檔進行索引時,會得到以下結果:
{
"_index": "********-2021",
"_id": "************",
"_source": {
...
},
"fields": {
"special_field": [
"my special text"
]
}
}
如果執行_search
查詢,則不會在_source
內返回special_field
作為其排除項。
使用以下_search
查詢,可以完美返回special_field
數據:
GET ********-2021/_search
{
"stored_fields": [ "special_field" ],
"_source": true
}
現在我試圖重新索引該索引內的所有文檔,但我丟失了存儲在special_field
中的信息,並且只有_source
字段正在重新索引。
有沒有辦法將special_field
放回_source
字段中?
有沒有辦法在不丟失special_field
數據的情況下重新索引該文檔?
如何在不丟失special_field
數據的情況下將這些文檔遷移到另一個集群?
謝謝你們。
謝謝 Hamid Bayat,我終於用一個小的 logstash 管道得到了它。
我將分享它:
input {
elasticsearch {
hosts => "my-first-cluster:9200"
index => "my-index-pattern-*"
user => "****"
password => "****"
query => '{ "stored_fields": [ "special_field" ], "_source": true }'
size => 500
scroll => "5m"
docinfo => true
docinfo_fields => ["_index", "_type", "_id", "fields"]
}
}
filter {
if [@metadata][fields][special_field]{
mutate {
add_field => { "special_field" => "%{[@metadata][fields][special_field]}" }
}
}
}
output {
elasticsearch {
hosts => ["http://my-second-cluster:9200"]
password => "****"
user => "****"
index => "%{[@metadata][_index]}"
document_id => "%{[@metadata][_id]}"
template => "/usr/share/logstash/config/index_template.json"
template_name => "template-name"
template_overwrite => true
}
}
我必須在docinfo_fields => ["_index", "_type", "_id", "fields"]
elasticsearch 輸入插件中添加fields
,並且我所有的存儲字段都在[@metadata][fields]
事件字段上。
由於@metadata
字段未編入索引,我不得不在根級別添加一個具有[@metadata][fields][special_field]
值的新字段。
它的工作就像一個魅力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.