1

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

4

1 回答 1

1

问题与大写/小写有关:

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

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

于 2013-07-22T08:17:31.420 回答