Можно ли заменить анализатор, указанный в схеме в Solr, без переиндексации из исходного источника? - PullRequest
5 голосов
/ 28 октября 2010

В Solr, если у нас есть поле в схеме с сохраненным = "true", и мы меняем анализатор, связанный с этим полем, возможно ли обновить только это поле без переиндексации всех документов? Можно ли это сделать, используя «сохраненные» значения поля с новым анализатором, не возвращаясь к исходному источнику данных?

Ответы [ 3 ]

1 голос
/ 03 декабря 2010

Парень, я оптимизировал твой код.

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

        Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
        docs.add(inputdoc) ;
        server.add(docs) ;
        // server.commit() ;
    }
    server.commit() ;
0 голосов
/ 24 декабря 2010

Ознакомьтесь с этим Учебником IBM для Solr

0 голосов
/ 28 октября 2010

Я нашел способ, используя 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() ;
        }

Когда мы добавляем «новый» inputdoc (копию старого resultDoc), он использует новый анализатор, который мы изменили в схеме для индексации. Это не очень элегантно, но работает.

...