2012-08-29 90 views
25

Solr 4測試版已發佈,GA版本即將推出。部分文檔更新已經有一段時間了,這裏解釋如下:http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/solrj api部分文檔更新

但是,我還沒有想出如何使用solrj api。

有誰知道solrj可以嗎?或者solrj對此功能無法正常使用?

更新:我在郵件列表中描述(見回覆here),我發現,在solrj API,一個SolrInputField的值可以是地圖 - 它並不一定是一個簡單的標值。 如果它是地圖,則solrj會向該字段的xml元素添加附加的update屬性。 例如, 此代碼:

SolrInputDocument doc = new SolrInputDocument(); 
Map<String, String> partialUpdate = new HashMap<String, String>(); 
partialUpdate.put("set", "foo"); 
doc.addField("id", "test_123"); 
doc.addField("description", partialUpdate); 

產生這個文件:

<doc boost="1.0"> 
    <field name="id">test_123</field> 
    <field name="description" update="set">foo</field> 
</doc> 

在這個例子中,我用了「設置」這個額外的屬性,但它不工作。 Solr不會按照我的預期更新該字段。 根據此鏈接: http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/ 有效值爲「設置」和「添加」。

有什麼想法?

+1

這可以幫助你 [Solr的更新] [1] [1]:http://stackoverflow.com/questions/8365713/solr-update-specific-fields-rather-than -entire-document – prashant

+0

@prashant該問題的答案已過時。在這個問題的重複中還有另一個答案,但是它不能幫助 – Yoni

+0

甚至可以使用'ArrayList'插入值列表,那麼'partialUpdate'將被聲明爲'Map partialUpdate = new HashMap ();'和作爲'add'的鍵 – veer7

回答

29

事實證明,問題中上面顯示的代碼片段實際上起作用。我第一次嘗試時不知道出了什麼問題,也許我只是忘了提交或者我的模式配置錯誤。

無論如何,這個問題是非常本地化的。但是,由於哈希映射的api文檔很少,我認爲也許值得保留這個問題和答案。

散列映射的鍵可以是三個值之一:

  • 組 - 設置的字段。
  • 添加 - 添加到多值字段。
  • inc - 增加一個字段。

在solrj單元測試中有一個代碼示例,其名稱爲testUpdateField

+1

要使用多個值更新多值字段,請創建一個'Map >',如https://issues.apache.org/jira/browse/SOLR-4134?page=com.atlassian.jira .plugin.system。issuetabpanels:comment-tabpanel&focusedCommentId = 13537900#comment-13538174 – juanmirocks

+4

[link] http://svn.apache.org/repos/asf/lucene/dev/trunk/solr/solrj/src/test/org/apache/solr/client /solrj/SolrExampleTests.java可能會貶低某人 –

+0

remove和removeregex也是哈希值的可能值https://cwiki.apache.org/confluence/display/solr/Updating+Parts+of+Documents – ilinca