1

大量のデータを含む JSON があります。現在、すべてのフィールドのデータ型が毎回固定されているわけではありません。たとえば、 のようにIds完全な整数として表示される場合もありますが、 のよう123に表示される場合もあります。Stringa123

デフォルトでは、index.mapper.dynamicですtrue。そのため、型マッピングは、インデックス作成のために初めて受信したデータごとに自動的に定義されます(While creating the index for first set of JSON data)Idここで、データの最初のセットがとして値を持っているとしましょう。123そのため、タイプ はIdとしてマッピングされIntegerます。したがって、一部のデータがIdas String、 likea123の場合、タイプが にマップされるため、例外がスローされIntegerます。

index.mapper.dynamic: falseを入れることで、動的型マッピングをオフにすることができますelasticsearch.yml。ただし、すべてのフィールドのタイプ マッピングが無効になります。したいPartial Type Mapping。のような一部のフィールドでは、特定の形式でdateのタイプ マッピングが必要です。datetime

したがって、私の目標は、JSON データのいくつかのフィールドに対してのみ型マッピングを実現することです。したがって、JSON に 20 個のフィールドがある場合、4 個のフィールドの型を気にし、他の 16 個のフィールドが文字列と見なされる場合は、それで問題ありません。

このような部分型マッピングを実現する方法はありますか? Java クライアントを使用しています。

4

1 に答える 1

1

短い答え - いいえ。

もう少し - ElasticSearch はスキーマレスではなく、動的です。これは、すべてのフィールドに type があることを意味しますが、この型は事前に指定する必要はなく、最初に検出された値に従って動的に決定できます。繰り返しになりますが、マッピングのないフィールドなどというものはありません。異なるタイプの値を含むフィールドを持つことはできません。これが必要な場合は、このフィールドのすべての値を文字列に変換するだけです。

于 2013-10-21T13:48:51.010 に答える