使用 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 中有一个解决方法为我解决了这个问题。
我正在使用 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 中有一个解决方法为我解决了这个问题。