2016-12-16 110 views
0

我正面临与文档更新有关的麻烦。elasticsearch不更新文档

我能够索引(创建)文档,并且它们正确地添加到索引上。

尽管如此,当我试图更新其中的一个时,操作没有进行,文档没有更新。

当我第一次添加它就像文件:

{ 
     "user" : "user4", 
     "timestamp" : "2016-12-16T15:00:22.645Z", 
     "startTimestamp" : "2016-12-16T15:00:22.645Z", 
     "dueTimestamp" : null, 
     "closingTimestamp" : null, 
     "matter" : "F1", 
     "comment" : null, 
     "status" : 0, 
     "backlogStatus" : 20, 
     "metainfos" : { 
      "ceeaceaaaceeaceaaaceeaceaaaceeaaceaaaceeabceaaa" : [ "FZ11" ] 
     }, 
     "resources" : [ ], 
     "notes" : null 
     } 

这是我使用,以建立UpdateRequest代码:

this.elasticsearchResources.getElasticsearchClient() 
.prepareUpdate() 
.setIndex(this.user.getMe().getUser()) 
.setType(type) 
.setId(id.toString()) 
.setDoc(source) 
.setUpsert(source) 
.setDetectNoop(true); 

我也能调试这是这个请求的内容开始发送给elasticsearch。该文件是:

{ 
    "user":"user4", 
    "timestamp":"2016-12-16T15:00:22.645Z", 
    "startTimestamp":"2016-12-16T15:00:22.645Z", 
    "dueTimestamp":null, 
    "closingTimestamp":null, 
    "matter":"F1", 
    "comment":null, 
    "status":0, 
    "backlogStatus":20, 
    "metainfos":{ 

    }, 
    "resources":[ 

    ], 
    "notes":null 
} 

正如你所看到的唯一区别是metainfos是空的,当我尝试更新文档。

执行此update request之后,文档未更新。我的意思是metainfos内容保持像以前一样:

#curl -XGET 'http://localhost:9200/user4/fuas/_search?pretty' 
{ 
    "took" : 2, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 1, 
    "successful" : 1, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 1, 
    "max_score" : 1.0, 
    "hits" : [ { 
     "_index" : "living_v1", 
     "_type" : "fuas", 
     "_id" : "327c9435-c394-11e6-aa90-02420a011808", 
     "_score" : 1.0, 
     "_routing" : "user4", 
     "_source" : { 
     "user" : "user4", 
     "timestamp" : "2016-12-16T15:00:22.645Z", 
     "startTimestamp" : "2016-12-16T15:00:22.645Z", 
     "dueTimestamp" : null, 
     "closingTimestamp" : null, 
     "matter" : "F1", 
     "comment" : null, 
     "status" : 0, 
     "backlogStatus" : 20, 
     "metainfos" : { 
>>>>>>>> "ceeaceaaaceeaceaaaceeaceaaaceeaaceaaaceeabceaaa" : [ "FZ11" ] 
     }, 
     "resources" : [ ], 
     "notes" : null 
     } 
    } ] 
    } 
} 

我不完全弄清楚什么是错的。有任何想法吗?

回答

1

ElasticSearch不会更新空的对象。你可以尝试:
"metainfos":null
"metainfos":"ceeaceaaaceeaceaaaceeaceaaaceeaaceaaaceeabceaaa":[]

清理现场。

+0

让我多钻一些你的答案。不过,第一次创建一个文档时,这个属性metainfos是一个空数组而不是空值(metainfos:[])'。可能吗? (我现在无法测试它...) – Jordi

+0

这取决于您的映射,但是是空阵列也可以。 – Hosar

+0

谢谢@Hosar。你已经写下了''它取决于你的映射''。你能详细介绍一下你的意思吗? – Jordi