最近、JavaでのElasticSearchインデックス作成でこの問題が発生しました。シリアライズされたjsonバイト配列からElasticSearchにレコードを書き込むとき、フィールドの1つが見つからないか、ドロップされます。ElasticSearchはJavaでインデックス作成のフィールドを削除します
きれいに印刷byte[] content
例:
{
"created_at": 1468390585000,
"name": "Lucy",
"id": 123,
"message": "Hi how are you",
"thread_id": 456,
"user_id": 789
}
のJavaインデックスコール:インデックスで
IndexRequest indexRequest = new IndexRequest(INDEX, TYPE, data.getId().toString())
.source(content)
.versionType(VersionType.EXTERNAL)
.version(data.getCreatedAt().getTime());
、すべてのフィールドがname
を除いた結果で存在している:
GET /my_index/post/123
{
"_index": "my_index",
"_type": "post",
"_id": "123",
"_version": 1468390585000,
"found": true,
"_source": {
"id": 123,
"user_id": 456,
"created_at": 1468390585000,
"message": "Hi how are you",
"thread_id": 789
}
}
name
は、私が新たに作成した新しいフィールドです。
{
"my_index":{
"mappings":{
"post":{
"properties":{
"created_at":{
"type":"long"
},
"name":{
"type":"string"
},
"id":{
"type":"long"
},
"message":{
"type":"string",
"analyzer":"english_text"
},
"thread_id":{
"type":"long"
},
"user_id":{
"type":"long"
}
}
}
}
}
}
他のフィールドは、post
タイプの作成で作成されました。
Java APIでデータの書き込み/インデックス作成に何らかのフィルタリングがあると思われます。私はPUT
と同じjsonをコマンドラインで見ることができ、name
がresultに含まれていると見ることができます。 Java APIだけがフィールドを削除しているようです。しかし、私は確信していません。
ご意見がありましたら、感謝いたします。