2016-04-06 4 views
4

既存のフィールドのプロパティをnot_analyzedからanalyzedに変更することはできますか?弾性検索 - not_analyzedから分析されたフィールドに変更する

もしそうでなければ、私のすべてのドキュメントを店内に保管するために何ができますか?

マッピングを削除することはできません(すべてのドキュメントがなくなるためです)。分析するには古いフィールドが必要です。

+0

実行しているESのバージョンは何ですか? – Val

+0

@Val ES ver。 2.2.0 – ohadinho

答えて

8

既存のフィールドを変更することはできませんが、フィールドに別のフィールドまたはadd a sub-fieldを作成することができます。

私は後者の解決策を検討しています。だから、最初に、このように、既存のフィールドに新しいサブフィールドを追加:上記

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

、我々は(not_analyzedある)既存のyour_fieldに(分析する)サブフィールドはyour_field.subと呼ばれる追加しました

次に、新しいサブフィールドに値を設定する必要があります。あなたは、最新の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]}" 
} 
} 
+0

最初のメソッド(再インデックス)コードも追加できますか? – ohadinho

+1

確かに、ここに行きます。 – Val

+0

ありがとうございます。 :) – ohadinho