[英]ElasticSearch drops a field in indexing with Java
我最近在Java中用ElasticSearch索引遇到了這個問題。 當從序列化的json字節數組將記錄寫入ElasticSearch時,字段之一丟失或丟失。
漂亮打印的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
列入結果。 似乎只有Java API刪除了該字段。 但我不確定。
如果您有任何想法,我將不勝感激!
事實證明,現有文檔沒有新的name
屬性。 因此,插入具有相同id
和version
且name
經過修改的文檔將導致版本沖突。 命令行中的PUT
是有效的,因為它是一個新文檔。 它與Java無關。
我應該使用update
API進行部分更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.