SolrJ - 我无法更新所有Solr文档的具体字段值

时间:2013-07-17 17:24:31

标签: java solr solrj

我为我的问题编写了非常硬编码的解决方案,但它应该没问题。我需要为索引中的所有文档编辑具体字段的某些值。我的索引中有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();
        }           
    }

1 个答案:

答案 0 :(得分:1)

您需要将更新的文档发送回Solr以便更新。

在调用commit之前使用Add the command solrServer.add(docs);将其发回。请参阅下面的更新代码段。

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