我使用signatureupdateprocessorfactory来生成唯一键“id”。
<processor class="solr.processor.SignatureUpdateProcessorFactory">
<bool name="enabled">true</bool>
<str name="signatureField">id</str>
<bool name="overwriteDupes">true</bool>
<str name="fields">image_link</str>
<str name="signatureClass">solr.processor.Lookup3Signature</str>
我想修改的文档是:
<doc>
<str name="title">47107</str>
<str name="id">6e004034dafc9f11</str>
<long name="_version_">1528941445348589568</long>
<str name="image_link">xyz.jpeg</str>
</doc>
我正在使用solrj来修改文档。
SolrInputDocument sdoc = new SolrInputDocument();
sdoc.addField("id","6e004034dafc9f11");
Map<String,Object> fieldModifier = new HashMap<>(1);
fieldModifier.put("set","47100");
sdoc.addField("title", fieldModifier); // add the map as the field value
server.add( sdoc ); // send it to the solr server
server.commit();
这显示错误
Document contains multiple values for uniqueKey field: id=[6e004034dafc9f11, 0000000000000000]
如果我使用
<processor class="solr.UUIDUpdateProcessorFactory" />
为id字段生成uuid。 然后添加另一个类似于要修改的文档的doc。再次这是不可取的。
但是当我不使用自动生成的唯一ID时。这段代码工作正常。即在添加文档时,我也指定了id字段。 代码是:
SolrInputDocument sdoc = new SolrInputDocument();
sdoc.addField("id","1");
Map<String,Object> fieldModifier = new HashMap<>(1);
fieldModifier.put("set","47101");
sdoc.addField("title", fieldModifier); // add the map as the field value
server.add( sdoc ); // send it to the solr server
server.commit();
这里有一个类似的问题Solr: How to update a document with unique ID。
如何使用自动生成的唯一ID执行此操作。可能吗。如果是,那么请帮助。谢谢