我的uniqueKey定义为:
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<uniqueKey>id</uniqueKey>
我将几个文档加载到Solr及其相应的“id”字段,我现在需要的是UPDATE“id”值,有可能吗?
当我尝试这样做时,我收到此错误:
Document contains multiple values for uniqueKey field
我正在使用Apache Solr 4.3.0
答案 0 :(得分:2)
不能直接。在我开始讨论你如何间接地做到这一点之前,我需要解释一些事情。
uniqueKey字段中的值是Solr处理文档更新/替换的方式。当您发送文档进行索引时,如果已存在具有相同uniqueKey值的现有文档,Solr将在索引新文档之前删除其自己的副本。
原子更新功能略有不同。它允许更新添加,更改或删除文档中除uniqueKey字段之外的任何字段 - 因为这是Solr识别文档的方式。
您需要做的是基本上使用旧文档中的所有数据索引新文档,并删除旧文档。如果文档中的所有字段都可用于索引过程,那么您可以在删除旧文档之前或之后对新文档编制索引。否则,您可以从Solr中查询现有doc,创建一个新索引并将其编入索引,然后删除旧文档。
为了使用现有的Solr文档索引新文档,必须存储所有字段,除非它们是copyField目标,在这种情况下不得存储它们。原子更新(如上所述)具有相同的要求。如果未存储这些字段中的一个或多个,则搜索结果将不包含该字段,数据将丢失。