我想用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大写...有没有其他人看到过这种行为,如果是这样,有没有办法避免这种情况?
答案 0 :(得分:1)
问题与大写/小写有关:
Solr确实以大写形式返回ObjectGuid并期望它为大写。但是,在C#.Net中使用SolrNet或Guid.Parse时,默认情况下Guid会转换为小写。
如果使用小写Guid,则它与Solr中的现有文档不匹配,并创建新记录。此外,由于Solr正在尝试创建新记录,因此必须提供所有必填字段,这解释了我遇到的两个问题。