SolrJ addFile сохраняет документы открытыми - PullRequest
0 голосов
/ 13 февраля 2011

Я уже отправил подобный вопрос, но я разбил проблему до ее простейшего вида, поэтому я собираюсь опубликовать его снова:

Проблема в том, что SolrJ, похоже, хранит файлручки открываются, если я добавляю один и тот же файл более одного раза.

Я использую следующий метод для отправки документа в Solr:

public boolean addDocument( File doc ) throws IOException, SolrServerException {

    ContentStreamUpdateRequest csur = new ContentStreamUpdateRequest( "/update/extract" );

    csur.addFile( doc );
    csur.setParam( "literal.id", Utils.getAbsolutePath( doc ) );
    csur.setAction( AbstractUpdateRequest.ACTION.COMMIT, true, true );
    NamedList<Object> result = this.solr.request( csur );


    return result != null;
}

И этот метод для удаления документов:

public void removeDocument( File doc ) throws IOException,
        SolrServerException {

    this.solr.deleteById( Utils.getAbsolutePath( doc ) );
    this.solr.commit();
}

Но кажется, что некоторые файловые дескрипторы остаются в прошлом:

Следующий фрагмент демонстрирует проблему:

File doc = new File( "../../testpdf/bbb.pdf" );
solr.addDocument( doc );
//solr.removeDocument( doc );   // Without these 2 lines, all handles
//solr.addDocument( doc );      // are released correctly

Если я добавлю один и тот же документ дважды, SolrJ каким-то образом сохранитобрабатывает в реальном времени, и добавленный документ не может быть изменен никакими другими процессами.

Я уже пробовал вызывать, используя csur.addContentStream() вместо csur.addFile() в addDocument, а затем закрывать базовый поток и читательдобавлен поток, без эффекта.

спасибо за любые предложения заранее

1 Ответ

0 голосов
/ 26 мая 2011

Не удалось это исправить, сделал обходной путь, написав собственный ContentStream, который буферизует документ.

...