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

本文关键字:文档 更新 执行 何使用 HttpWebRequest Solr | 更新日期: 2023-09-27 18:24:00

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

我有两个问题。

首先,在执行原子更新查询时,Solr会抱怨缺少必需的字段。除了uniqueID和正在更新的字段之外,我不想提供任何字段,这可能吗?

其次,如果我提供了所有必需的字段,Solr就会创建一个新的文档。这让我怀疑uniquekey没有正常工作。

唯一密钥是:

<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从数据库导入数据,并且数据库中的Guid都是大写的。我注意到(在使用SolrNet时)Guid返回小写,但需要提供回Solr大写。。。其他人见过这种行为吗?如果是,有办法避免这种情况吗?

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

问题与大写/小写:有关

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

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