2016-08-25 15 views
0

elasticsearchに多数のJSONログが送られます。私はスキーマについて何のコントロールもありません。 新しいフィールドを動的にインデックスすることはできますが、フィールドのタイプが変更された場合はインデックスを解除することはできますか?Elasticsearch:タイプが変更された場合、フィールドを無視/インデックスしません。

これは、JSONログのスキーマがないためです。フィールドの種類の不一致のためログを取りたくないFinaly私は一貫したフィールドタイプでそれらのフィールドのクエリを作成できるようにしたい!事前に

多くのおかげで、

ダニエル

+0

「フィールドのタイプが変更されている場合、それらのインデックスを解除する」とはどういう意味ですか?フィールドのタイプは変更できません。 –

+0

Hay、私の知る限り、JSONログのフィールドをインデックスに登録しないように定義できます。それらがインデックスに登録されていない場合、elasticsearchは型をフィールドに割り当てません(私が間違っていれば私を修正します)。 JSONログでどのフィールドが表示されるのかはわかりませんし、どのフィールドが常に同じタイプ(priory)であるのかわかりません。だから、 "索引付けを元に戻す"とは、JSONログをさまざまなタイプのフィールドで「受け入れる」方法を見つけることです。この「索引付けされていない」索引フィールドは、異なるタイプを保持できないという前提の下にあります。 – DaTebe

+1

いいえ。ストーリーはこうです:フィールドが存在しない場合は、マッピングで作成されます。 ESはそのフィールドのタイプを「推測」するために最善を尽くします。しかし、後でインデックスを作成しようとすると、最初のタイプに一致しないものがあります。例えば、あなたが数値を索引付けし、ESがこれを推測した場合、それは 'type:long'の索引を作成します。その後、もし 'long 'フィールドと同じ名前のフィールドを持つドキュメントをx個だけ埋め込んだとしても、' 'bla bla''を値として置くと、ESは文章を引用しないで不平を言うでしょう。このタイプのエラーを無視したい場合は 'ignore_malformed:true'が必要です。 –

答えて

1

フィールドが存在しない場合は、それがデフォルトでマッピングに作成されます。 ESはそのフィールドのタイプを「推測」するために最善を尽くします。しかし、後でインデックスを作成しようとすると、最初のタイプに一致しないものがあります。たとえば、数値を索引付けし、ESがこれを推測した場合、索引はtype: longになります。その後、longフィールドと同じ名前のフィールドを持つドキュメントにインデックスを付けるが、"bla bla"を値として入力すると、ESはドキュメントにインデックスを作成せず、インデックスを作成しません。この種のエラーを無視したい場合はignore_malformed: trueが必要です。関連するドキュメントはhereです。

場合によっては、受け取ったデータを十分に管理することができません。あるユーザが日付であるログインフィールドを送信し、別のユーザが電子メールアドレスであるログインフィールドを送信する場合があります。

フィールドに間違ったデータ型をインデックスすると、デフォルトで例外がスローされ、ドキュメント全体が拒否されます。 ignore_malformedパラメータをtrueに設定すると、例外が無視されます。不正なフィールドは索引付けされませんが、文書内の他のフィールドは正常に処理されます。

関連する問題