通过 for 循环使用 SolrJ 更新 Solr 文档

Update Solr document using SolrJ via for loop

我有一个 Solr 索引文档,我想更新一些字段。但是接下来的问题是,如果我正在更新单个文档,那么它就会完美更新。但是如果我使用 for 循环一起更新多个文档,那么相同的代码就会抛出错误。

这是我更新单个文档的代码,它正在运行 -

SolrInputDocument doc = new SolrInputDocument();
HashMap<Integer, String> Id = new HashMap<>();
HashMap<Integer, String> Title = new HashMap<>();
HashMap<Integer, String> Name = new HashMap<>();
Id.put(0, 123);
Id.put(1, 345);
Title.put(0, "Title1");
Title.put(1, "Title2");
Name.put(0, "Tony");
Name.put(1, "Scarlet");
doc.addField("Id", Id.get(0));
doc.addField("Title", Title.get(0));
doc.addField("Name", Name.get(0));
solr.add(doc);
solr.commit();

现在相同的代码,如果我 运行 使用 for 循环,如 -

SolrInputDocument doc = new SolrInputDocument();
HashMap<Integer, String> Id = new HashMap<>();
HashMap<Integer, String> Title = new HashMap<>();
HashMap<Integer, String> Name = new HashMap<>();
Id.put(0, 123);
Id.put(1, 345);
Title.put(0, "Title1");
Title.put(1, "Title2");
Name.put(0, "Tony");
Name.put(1, "Scarlet");
for (int i =0; i<2; i++) {
   doc.addField("Id", Id.get(i));
   doc.addField("Title", Title.get(i));
   doc.addField("Name", Name.get(i));
   solr.add(doc);
   solr.commit();
}

然后这是抛出错误 - "Document contains multiple values for uniqueKey field: Id=[123, 345]"。 注意 - Id 是我的唯一键。 这里发生了什么问题?

您并没有为每次迭代创建一个新的 SolrDocument,所以您只是向旧的添加值;循环的下一次迭代将导致为 id 字段设置两个值,这将不起作用。

为每个要添加的文档创建一个新的 InputDocument,并在添加两个文档后将提交移至(无需在循环中提交 each 文档) .

我还会考虑将我的 HashMap 重写为表示您要索引的内容的单个对象,或者至少使用 HashMap 来描述具有 "name"、"id" 和 [= 的对象23=] 条目,然后将这些哈希图存储在列表中。

for (int i = 0; i < 2; i++) {
    SolrInputDocument doc = new SolrInputDocument();
    doc.addField("Id", Id.get(i));
    doc.addField("Title", Title.get(i));
    doc.addField("Name", Name.get(i));
    solr.add(doc);
}

solr.commit();