【问题标题】:SolrJ - I cannot update a values of concrete fields of all Solr docsSolrJ - 我无法更新所有 Solr 文档的具体字段的值
【发布时间】:2013-07-17 17:24:31
【问题描述】:

我已经为我的问题编写了非常硬编码的解决方案,但应该没问题。我需要为索引中的所有文档编辑一些具体字段的值。我的索引中有 55500 个文档。

我正在尝试编辑每个文档的字段并提交 500 个文档。我认为这个解决方案应该可以工作(我试图从我的索引中按 id 删除一个文档,但它已被删除)但我的索引没有变化......仍然有字段值错误(#0; 我想删除)

    for (int i = 0; i < 55501; i = i + 500) {
        SolrQuery query = new SolrQuery();    
        query.setParam("start", i+"");
        query.setParam("q", "*:*");
        query.setParam("rows", "500");

        String url = "http://MYINDEX";
        HttpSolrServer solrServer = new HttpSolrServer(url);            

        QueryResponse qResponse;
        try {
            qResponse = solrServer.query(query);
            SolrDocumentList docs=qResponse.getResults();
            for (SolrDocument solrDocument : docs) {
                String parseTime = (String) solrDocument.getFieldValue("parse_time");
                String parseTimeUnix = (String) solrDocument.getFieldValue("parse_time_unix_timestamp");
                parseTime = parseTime.replaceAll("#0;", "");
                parseTimeUnix = parseTimeUnix.replaceAll("#0;", "");                
                solrDocument.setField("parse_time", parseTime);
                solrDocument.setField("parse_time_unix_timestamp", parseTimeUnix);
            }

        } catch (SolrServerException e) {
            e.printStackTrace();
        }

        try {
            solrServer.commit();
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }           
    }

【问题讨论】:

    标签: java solr solrj


    【解决方案1】:

    您需要将更新后的文档发送回 Solr 以进行更新。

    在调用提交之前使用添加命令solrServer.add(docs); 将它们发回。请参阅下面更新的 sn-p。

     ...
     try {
         solrServer.add(docs);
         solrServer.commit();
     }
     ...
    

    【讨论】:

    • 感谢您提供有用的建议。 solrServer.add() 应该在那里并且必须有 SolrInputDocument sid = org.apache.solr.client.solrj.util.ClientUtils.toSolrInputDocument(solrDocument);尚未...将 SolrDocument 转换为 SolrInputDocument
    • 是的,我忘记了您需要传递 SolrInputDocument 以进行更新,很高兴您找到了 ClientUtils.toSolrInputDocument 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 2013-12-02
    • 2020-11-02
    • 1970-01-01
    相关资源
    最近更新 更多