나는 java에서 Lucene
을 처음 사용하고 있습니다. 나는 매우 이상한 질문을 만났습니다 :검색자를 null로 만든 후 Lucene에서 색인 디렉토리를 삭제할 수없는 이유는 무엇입니까?
서비스가 tomcat(struts 2)
에 배포되었습니다. 서비스가 시작되면 검색 서비스를 제공하기 위해 인덱스와 검색 자 인스턴스를 생성합니다.
그런 다음 서비스를 중지하지 않고 색인을 업데이트하려고합니다. 그래서 다른 인덱스 디렉토리를 생성 한 후, 새로운 인덱스 디렉토리를 사용하기 전에 언급 된 검색자를 만듭니다. 그런 다음 이전 디렉토리를 삭제하십시오. 그러나 여기에 문제가 발생했습니다. 이전 디렉토리를 삭제할 수 없습니다. The message says the directory is still being used by an application.
왜 그렇습니까? 나는 색인 디렉토리를 바꾸고 검색자를 위해 이전 indexReader
을 닫았다. 나는 무엇이든 놓친다? Lucene
의 버전은 4.3입니다. 다음과 같이
오류 메시지는 다음과 같습니다 그러나, 나는 indexReader.close()
및 indexDirectory.close()
라고 한
Unable to delete file: D:\Projects\.metadata\.me_tcat\webapps\nlp\WEB-INF\data\[email protected]\diag\_0.nvd
.
그런데 어떤 스레드가 java 디렉토리를 사용하는지 찾는 방법이 있습니까?
영어로 불편을 끼쳐 드려 죄송합니다.
실제로 색인 생성이 끝나면 IndexWriter.close()를 호출 한 다음 새 색인 폴더를 사용하여 검색자를 초기화합니다. –
그런 다음 이전 색인 폴더를 삭제하려고합니다. "폴더의 파일이 응용 프로그램에서 사용 중입니다."라는 메시지가 나타납니다. 그러나 검색 자들은 새로운 색인 폴더를 사용하고 있습니다. 나는 왜 이전 색인을 지울 수 없는지 알지 못합니다. –
서비스가 시작되면 새로운 IndexWriter와 IndexSearcher가 생성되고 새로운 색인이 생성됩니다 폴더를 삭제하고 오래된 것을 지우고 싶다면'IndexWriter.close()'와'IndexSearcher.close()'를 호출하지 않으면 오래된 것을 삭제할 수 없다. – Salah