2014-09-13 86 views
1

請幫忙。我必須通過其唯一標識符更新Solr文檔。我說,我有一個文件,如:Solr:如何使用唯一ID更新文檔

{ 
     "text": "qwe", 
     "id": "01a3aa6db06d39e8", 
     "_version_": 1471599607983112200 
    } 

我想更新域「短語」,所以我發佈以下內容127.0.0.1:8983/solr/update/?commit=true:

[ 
     { 
     "id" : "01a3aa6db06d39e8", 
     "text" : {"set":"qwe. updated"} 
     } 
    ] 

Solr的說400錯誤的請求,並返回如下:

{ 
     "responseHeader": 
     { 
      "status":400,"QTime":0}, 
      "error":{"msg":"Document contains multiple values for uniqueKey field: id=[01a3aa6db06d39e8, 0000000000000000]","code":400} 
     } 
    } 

如何包含一個唯一的密鑰文件,可以正確地更新?

+0

能否請您發表您的'從你的schema.xml中的'? – lxg 2014-09-13 18:28:18

+0

... ... Maksim 2014-09-13 18:30:43

+0

你應該有一個'name =「id」'的字段。你可以張貼那個嗎? – lxg 2014-09-13 18:31:41

回答

0

試試這個。

{"id":"01a3aa6db06d39e8","text":"hello world , this is an update"} 

如果你想使文本作爲一個多維數組一樣的MongoDB,不能在Solr中進行適應,但也有辦法吧,有點亂。

如果您正在使用腳本來更新文檔,我認爲您使用的是循環包括提交和這樣一個在PHP while循環中的實例化:

while($row = mysqli_fetch_assoc($result)) 
{ 
    $client = new SolrClient($options); 

    $doc = new SolrInputDocument(); 
    $doc->addField('id', $row['id']);  
    $doc->addField('date', '2015-06-01T00:00:0.0Z'); 
    $doc->addField('name', $row['name']);  
    $updateResponse = $client->addDocument($doc); 
} 
$client->commit();