Индексные файлы с SolrJ блокирует файл - PullRequest
0 голосов
/ 25 июня 2019

Я индексирую файлы (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.");
    }

1 Ответ

0 голосов
/ 28 июня 2019

Если кто-то еще сталкивается с проблемой, взгляните на это: Файлы заблокированы после индексации Очевидно, это ошибка в библиотеке SolrJ, из-за которой поток файлов не закрывается должным образом.Ошибка, по-видимому, исправлена, но проблема все еще возникает, поэтому в ссылке есть обходной путь, который решил эту проблему для меня.

...