【问题标题】:Elasticsearch - Reindex documents with stored / excluded fieldsElasticsearch - 使用存储/排除字段重新索引文档
【发布时间】:2021-04-21 11:48:46
【问题描述】:

我有一个具有以下配置的索引映射:

"mappings" : {
  "_source" : {
    "excludes" : [
      "special_field"
    ]
  },
  "properties" : {
    "special_field" : {
      "type" : "text",
      "store" : true
    },
  }
}

因此,当使用此映射对新文档进行索引时,会得到以下结果:

{
  "_index": "********-2021",
  "_id": "************",
  "_source": {
    ...
  },
  "fields": {
    "special_field": [
      "my special text"
    ]
  }
}

如果执行_search 查询,则special_field 不会在_source 内返回,因为它被排除在外。

通过以下_search查询,完美返回special_field数据:

GET ********-2021/_search
{
  "stored_fields": [ "special_field" ],
  "_source": true
}

现在我试图重新索引该索引中的所有文档,但我丢失了存储在special_field 中的信息,并且只有_source 字段正在重新索引。

有没有办法将 special_field 放回 _source 字段中?

有没有办法在不丢失 special_field 数据的情况下重新索引该文档?

如何将这些文档迁移到另一个集群而不丢失special_field 数据?

谢谢大家。

【问题讨论】:

  • 你在使用logstash吗?
  • 我认为使用 logstash 您可以复制 speial_field 并从 _source 中删除。

标签: elasticsearch elastic-stack elk


【解决方案1】:

感谢 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 
  }
}

我必须将fields 添加到docinfo_fields => ["_index", "_type", "_id", "fields"] 弹性搜索输入插件中,并且我所有的stored_fields 都在[@metadata][fields] 事件字段上。

由于@metadata 字段没有被索引,我不得不在根级别添加一个带有[@metadata][fields][special_field] 值的新字段。

它就像一个魅力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    相关资源
    最近更新 更多