Я уже отправил подобный вопрос, но я разбил проблему до ее простейшего вида, поэтому я собираюсь опубликовать его снова:
Проблема в том, что 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
, а затем закрывать базовый поток и читательдобавлен поток, без эффекта.
спасибо за любые предложения заранее