2013-07-19 42 views
0

我想用HttpWebRequest更新Solr中的現有記錄。我使用的Solr 4.3.0和我不要想要使用任何類似SolrNet的庫。我想要做的是在Solr中準備一些數據,然後對我的應用程序(使用SolrNet)執行查詢來測試準備好的數據是否在查詢時返回。如何使用HttpWebRequest在Solr中執行文檔的原子更新

我有兩個問題。

首先,在執行原子更新查詢時,Solr會抱怨缺少必填字段。我不想提供除uniqueID和正在更新的字段以外的任何字段,這是可能的嗎?

其次,似乎如果我提供所有必填字段,Solr會創建一個新文檔。這導致我懷疑這個獨特的鍵不能正常工作。

唯一關鍵的是:像這樣

<field name="ObjectGuid" type="string" indexed="true" stored="true" required="true" multiValued="false"/> 

集:

<uniqueKey>ObjectGuid</uniqueKey> 

我現在已經在我的Solr指數兩個文件,都具有相同的objectGUID ...

任何幫助非常感謝。

編輯: 感謝您的回覆。

1,2 一個例子更新文檔:

<add> 
    <doc> 
     <field name="ObjectGuid">33176f43-b446-481b-84e9-3facf4d71717</field> 
     <field name="MyDate" update="set">2013-07-14T08:25:09Z</field> 
    </doc> 
</add> 

謝謝你指出的注意事項。在我的架構中的字段都stored="true"除以下兩種:

此外,一些<dynamicField>節點具有stored="false"

是這兩種情況下可能的原因的問題?如果我正確地閱讀警告,如果我們沒有爲該方面添加任何修飾符,則行爲是默認的,不應該是默認的,並且不應該是默認的,並且不應該是默認的,並且不應該是默認的,並且不應該防止原子更新。)

最後 我覺得可能是在GUID字段區分大小寫的問題。我之前已經注意到這一點。我們使用DataHandler從數據庫中導入數據,Guid在數據庫中都是大寫的。我注意到(使用SolrNet時)Guid返回小寫,但需要提供給Solr大寫......有沒有其他人看到過這種行爲,如果有,有沒有辦法避免這種情況?

+0

可以顯示您使用HttpWebRequest發送到Solr的更新查詢的示例。 –

+0

爲了您的第一個qn,請參閱http://yonik.com/solr/atomic-updates/上的示例。我相信如果你正在做你的原子更新,第二個問題不會出現。 – arun

+1

另外請確保您遵守了以下所有注意事項:https://wiki.apache.org/solr/Atomic_Updates#Caveats_and_Limitations,特別是關於將所有字段保存在Solr中的警告。 – arun

回答

0

的問題涉及大/小寫:

Solr的不返回大寫的objectGUID並期望它以大寫字母。但是,在C#.Net中使用SolrNet或Guid.Parse時,默認情況下Guid會轉換爲小寫。

如果使用小寫的Guid,則它與Solr中的現有文檔不匹配,並創建一條新記錄。此外,由於Solr正在嘗試創建新記錄,因此必須提供所有必填字段,這解釋了我遇到的兩個問題。