如何使用HttpWebRequest在Solr中执行文档的原子更新

时间:2013-07-19 14:28:57

标签: c# .net solr httprequest

我想用HttpWebRequest更新Solr中的现有记录。我正在使用Solr 4.3.0而我想要使用像SolrNet这样的库。我想要做的是在Solr中准备一些数据,然后对我的应用程序(确实使用SolrNet)执行查询,以测试在查询时是否返回准备好的数据。

我有两个问题。

首先,在执行原子更新查询时,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>

第3 感谢您指出警告。我的架构中的字段都有stored="true",但以下两个字段除外:

   

   

此外,一些<dynamicField>个节点有stored="false"

这两种情况是否可能导致问题?

(另外,我在solrconfig.xml中找不到发生的DistributedUpdateRequestProcessorFactory。如果我正确地阅读了警告,如果我们没有为该方面添加任何修饰符,则该行为是默认的,不应该阻止原子更新。)

最后 我认为在Guid领域可能存在区分大小写的问题。我之前已经注意到了这一点。我们使用DataHandler从数据库导入数据,Guids在数据库中都是大写的。我注意到(当使用SolrNet时)Guids返回小写,但需要提供回Solr大写...有没有其他人看到过这种行为,如果是这样,有没有办法避免这种情况?

1 个答案:

答案 0 :(得分:1)

问题与大写/小写有关:

Solr确实以大写形式返回ObjectGuid并期望它为大写。但是,在C#.Net中使用SolrNet或Guid.Parse时,默认情况下Guid会转换为小写。

如果使用小写Guid,则它与Solr中的现有文档不匹配,并创建新记录。此外,由于Solr正在尝试创建新记录,因此必须提供所有必填字段,这解释了我遇到的两个问题。