Я индексирую файлы (pdf, docx и т. Д.) С помощью SolrJ, и после этого я хочу добавить прослушиватель в каталог файлов для проверки изменений. Проблема в том, что после того, как я проиндексировал файлы (что, кажется, работает нормально), я не могу удалить или переместить любой из файлов.
Я выполняю код в функции Azure (микросервис).
Кажется, есть разница между добавлением всех файлов к одному запросу и последующей отправкой запроса в Solr или отправкой только одного запроса на каждый файл. Отправка всех файлов в одном пакете кажется работающей большую часть времени, и я могу впоследствии удалить и переместить локальные файлы, но когда я отправляю один запрос на файл, проблема всегда возникает.
Этот код работает большую часть времени:
public String indexFiles(String folderPath) throws IOException, SolrServerException, NullPointerException {
File folder = new File(folderPath);
ContentStreamUpdateRequest request = new ContentStreamUpdateRequest("/update/extract");
request = addFilesToRequest(folder, request);
NamedList resp = client.request(request);
client.commit();
return resp.toString();
}
private ContentStreamUpdateRequest addFilesToRequest(final File folder, ContentStreamUpdateRequest request) throws IOException{
File[] listOfFiles = folder.listFiles();
if(listOfFiles != null) {
for (File file : listOfFiles) {
if (file.isFile()) {
System.out.println("file is: " + file.getName());
request.addFile(file, getContentType(file));
}else{
request = addFilesToRequest(file, request);
}
}
}
return request;
}
хотя этот код, кажется, всегда блокирует файлы:
public void indexFiles(String folderPath) throws IOException, SolrServerException, NullPointerException {
File folder = new File(folderPath);
System.out.println("Starting indexing.");
addFilesToSolr(folder);
System.out.println("add files to Solr done.");
}
private void addFilesToSolr(final File folder) throws IOException, SolrServerException, NullPointerException{
File[] listOfFiles = folder.listFiles();
if(listOfFiles != null) {
for (File file : listOfFiles) {
if (file.isFile()) {
ContentStreamUpdateRequest request = new ContentStreamUpdateRequest("/update/extract");
System.out.println("file is: " + file.getName());
request.addFile(file, getContentType(file));
System.out.println("Sending request ...");
NamedList response = client.request(request);
System.out.println("Request send. Response is: " + response);
UpdateResponse resp = client.commit();
System.out.println("Committed. Response is: " + resp.getResponse().toString());
} else if (file.isDirectory()) {
addFilesToSolr(file);
}
}
}
System.out.println("Requests for all files created. End of method.");
}