0

field10インデックスの特定のレコードを更新したときに誤って作成されたフィールドがあります。このフィールドとそのすべてのコンテンツをインデックスから削除し、以下のマッピングを使用して再作成します。

"mytype":{
  "properties":{
    "field10":{ 
      "type":"string",
      "index":"not_analyzed",
      "include_in_all":"false",
      "null_value":"null"      
    }  
  }  
}

Put Mapping APIを使用してこのマッピングを作成しようとすると、次のエラーが発生します{"error":"MergeMappingException[Merge failed with failures {[mapper [field10] has different index values, mapper [field10] has different index_analyzer, mapper [field10] has different search_analyzer]}]","status":400}

このフィールドのマッピングを変更するにはどうすればよいですか?この小さな事故のためだけに、何百万ものレコードのインデックスを再作成したくありません。

ありがとう

4

1 に答える 1

1

AFAIK、単一のフィールドを削除して再作成することはできません。マッピングを変更して、すべてを自動的に再インデックス化することはできません。あなたが保存しないと想像してください_source。Elasticsearchは、インデックスが作成される前にデータがどのように見えるかをどのように知ることができますか?

field10.field10ただし、マルチフィールドを使用して、古いマッピングとfield10.new新しいアナライザーを使用してマッピングを変更できる可能性があります。

インデックスを再作成しない場合、新しいドキュメントのみにコンテンツが含まれfield10.newます。古いドキュメントを管理する場合は、次のことを行う必要があります。

  • すべてのドキュメントを再度送信します(すべてが更新されます)-別名reindex(スキャン&スクロールAPIを使用して古いドキュメントを取得できます)
  • UpdateAPIを使用してドキュメントを更新してみてください

次のようなクエリを実行してみてください。

curl -XPOST localhost:9200/crunchbase/person/1/_update -d '{
    "script" : "ctx._source.field10 = ctx._source.field10"
}'

ただし、ご覧のとおり、ドキュメントごとに実行する必要があり、BulkAPIを使用してすべてのインデックスを再作成するよりも時間がかかると思います。

それは役に立ちますか?

于 2013-01-29T08:10:19.657 に答える