Elasticsearch - 将字段从not_analyzed更改为已分析

时间:2016-04-06 08:10:01

标签: elasticsearch

是否可以将现有字段的属性从not_analyzed修改为analyzed

如果没有,我可以做些什么来保存我的所有文件?

我无法删除映射(因为所有文档都将消失),我需要分析旧字段。

2 个答案:

答案 0 :(得分:9)

您无法修改现有字段,但是,您可以为not_analyzed字段创建另一个字段或add a sub-field

我要采用后一种解决方案。首先,在现有字段中添加一个新的子字段,如下所示:

curl -XPUT localhost:9200/index/_mapping/type -d '{
    "properties": {
        "your_field": {
            "type": "string",
            "index": "not_analyzed",
            "fields": {
                "sub": {
                    "type": "string"
                }
            }
        }
    }
}'

上面,我们已将名为your_field.sub的子字段(已分析)添加到现有your_fieldnot_analyzed

接下来,我们需要填充新的子字段。如果您运行的是最新的ES 2.3,则可以使用功能强大的Reindex API

curl -XPUT localhost:9200/_reindex -d '{
  "source": {
    "index": "index"
  },
  "dest": {
    "index": "index"
  },
  "script": {
    "inline": "ctx._source.your_field = ctx._source.your_field"
  }
}'

否则,您只需使用以下Logstash配置,该配置将重新索引您的数据以填充新的子字段

input {
  elasticsearch {
   hosts => "localhost:9200"
   index => "index"
   docinfo => true
  }
}
filter {
 mutate {
  remove_field => [ "@version", "@timestamp" ]
 }
}
output {
 elasticsearch {
   hosts => ["localhost:9200"]
   manage_template => false
   index => "%{[@metadata][_index]}"
   document_type => "%{[@metadata][_type]}"
   document_id => "%{[@metadata][_id]}"
 }
}

答案 1 :(得分:0)

https://www.elastic.co/guide/en/elasticsearch/reference/0.90/mapping-multi-field-type.html

您可以使用此...有一种称为多字段类型映射的东西,它允许您为单个字段提供多个映射,您还可以根据字段类型进行查询。