簡體   English   中英

ElasticSearch在Java索引中刪除了一個字段

[英]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屬性。 因此,插入具有相同idversionname經過修改的文檔將導致版本沖突。 命令行中的PUT是有效的,因為它是一個新文檔。 它與Java無關。

我應該使用update API進行部分更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM