【问题标题】:Update Solr document using SolrJ via for loop通过 for 循环使用 SolrJ 更新 Solr 文档
【发布时间】:2017-11-07 06:05:12
【问题描述】:

我有一个 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();
}

然后这是抛出错误 - “文档包含 uniqueKey 字段的多个值:Id=[123, 345]”。 注意 - Id 是我的唯一键。 这里出了什么问题?

【问题讨论】:

    标签: solr solrj


    【解决方案1】:

    您不会为每次迭代创建一个新的SolrDocument,因此您只是在旧的迭代中添加值;循环的下一次迭代将导致为 id 字段设置两个值,这将不起作用。

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

    我还考虑将我的 HashMap 重写为单个对象,表示您要索引的内容,或者至少使用 HashMap 用“name”、“id”和“title”条目来描述对象,然后存储列表中的那些哈希图。

    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();
    

    【讨论】:

      猜你喜欢
      • 2021-11-04
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      相关资源
      最近更新 更多