是否可以更改Solr中架构中指定的分析器而无需从原始源重新索引?

时间:2010-10-27 20:52:12

标签: solr indexing schema-design

在Solr中,如果架构中有一个带有stored =“true”的字段,并且我们更改了与该字段关联的分析器,是否可以仅更新此字段而无需重新索引所有文档?这可以使用新分析仪使用字段的“存储”值而不返回原始数据源吗?

3 个答案:

答案 0 :(得分:1)

盖伊,我优化了您的代码。

    ...
    while (iter.hasNext()) {
        ...
        //server.deleteById(id) ;
        //server.commit() ;

        Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
        docs.add(inputdoc) ;
        server.add(docs) ;
        // server.commit() ;
    }
    server.commit() ;

答案 1 :(得分:0)

我找到了使用SolrJ的方法。

        SolrQuery query = new SolrQuery();

        query.setQuery( "whatever_by_id" );

        QueryResponse rsp;

        rsp = server.query(query);

        Iterator<SolrDocument> iter = rsp.getResults().iterator();

        while (iter.hasNext()) {
            SolrDocument resultDoc = iter.next();
            String id = (String) resultDoc.getFieldValue("oid"); //id is the uniqueKey field

            SolrInputDocument inputdoc = new SolrInputDocument() ;
            for( Map.Entry<String, Object> f : resultDoc.entrySet()) {
                inputdoc.setField(f.getKey(), f.getValue()) ;
            }

            server.deleteById(id) ;
            server.commit() ;

            Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
            docs.add(inputdoc) ;
            server.add(docs) ;

            server.commit() ;
        }

当我们添加“new”inputdoc(旧的resultDoc的副本)时,它使用我们在模式中更改的新分析器来进行索引。它不是很优雅,但它有效。

答案 2 :(得分:0)