使用 Solr 的索引文件会阻止文件

Index files wth SolrJ blocks the file

我正在使用 SolrJ 索引文件(pdf、docx 等),之后我想向文件目录添加一个侦听器以检查更改。问题是在我为文件编制索引后(这似乎工作正常)我无法删除或移动任何文件。

我是 运行 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.");
    }

如果其他人遇到这个问题,请看一下:Files locked after indexing 显然这是 SolrJ 库中的一个错误,文件流没有正确关闭。该错误显然已修复,但问题仍然存在,因此 link 中有一个解决方法为我解决了这个问题。