0

ElasticSearch 2.0 にアップグレードしていますが、Nest 1.7.0 のマッピングで問題が発生しました。フィールドを共有する 2 つの型があります (同じ形式)。

"@timestamp": {
            "type": "date",
            "format": "epoch_millis||dateOptionalTime"
          }

影響を受けるタイプのいずれかの起動時にマッピングを追加しようとすると (現在PUT、毎回マッピングを行っています)、次のエラーが返されます。

{
  "error": {
    "root_cause": [{
      "type": "merge_mapping_exception",
      "reason": "Merge failed with failures {[mapper [@timestamp] is used by multiple types. Set update_all_types to true to update [format] across all types.]}"
    }],
    "type": "merge_mapping_exception",
    "reason": "Merge failed with failures {[mapper [@timestamp] is used by multiple types. Set update_all_types to true to update [format] across all types.]}"
  },
  "status": 400
}

hereで説明されているコードベースのマッピングを使用していRawますが、次のようなものを使用してクライアントのプロパティに頼らずに、このメソッドからクエリ文字列をぶら下げる方法がわかりません。

_client.Raw.IndicesPutMapping("ourindex", "ourtype", PutMappingDescriptorObj, parameters => parameters.AddQueryString("update_all_types", null));

Nestの2.0 ブランチを参照しましたが、これらのマッピング呼び出しで update_all_types クエリ文字列パラメーターへの参照が見つかりませんでした。

呼び出しが機能する可能性があると仮定すると、IndicesPutMapping()現時点ではそれが唯一の選択肢ですか? 代わりに、これらのマッピングを条件付きで追加するだけでよいのではないかと考え始めています。

4

1 に答える 1

0

別の方法を見つけることができたことが判明しました。マッピングを作成していたときに、@timestampフィールドのフォーマットを明示的に提供していませんでした。2.0 では、システムがそれを変更として扱うように見えたため、問題が発生しました。マッピング ロジックで、これらの日付フィールドの既存の形式を次のようにピン留めすることで、これを乗り越えることができました。

// formatted strangely to make the addition more obvious
_client.Map<OurType>(m =>
    m.Properties(ps => ps
        .Date(d => d.Name(es => es.Date) // es is a reference to an instance of OurType, and Date is the name of the field being mapped to @timestamp
                    .Format("epoch_millis||dateOptionalTime") // this is what fixed it
             )
        //other props
    )
    //other stuff
);
于 2015-11-10T21:42:51.123 に答える