Lucene으로 재생 중입니다. 다른 읽기 스레드에서 내 변경 사항을 볼 수있게하려고합니다. 색인을 다시 작성하지 않고. 그 목적을 위해 SearcherManager 클래스를 사용합니다. 관리자의Java Lucene NRT 검색이 작동하지 않습니다.
이창조
Directory index = new SimpleFSDirectory(new File(LUCENE_INDEX_PATH));
w = new IndexWriter(index, config);
indexReader = IndexReader.open(w, true);
manager = new SearcherManager(w, true, null, null);
업데이트 요청
w.updateDocument(t, document);
manager.maybeReopen(); // openIfChanged same behavior
w.commit();
검색 요청
IndexSearcher searcher = manager.acquire();
try {
return performSearch(query, searcher, skip, limit);
} finally {
manager.release(searcher);
searcher = null;
}
변경 사항 디스크에 플러시하지만, 새로운 검색 요청은 응용 프로그램을 다시 시작한 후 그들을 볼 (레크 리 에이션 색인의). IndexSearcher가 여전히 이전 색인을 가리키는 것처럼 보입니다.
예, 별도의 indexReader는 제거 된 레거시 코드입니다. 변경 사항이 적용될 때 정확히 알기 때문에 나에게 바람직하다. 동일한 스레드에서 maybeReopen을 호출한다. 이제 용어로 문서를 삭제하는 유일한 문제. 색인에서 문서가 삭제되지 않습니다. 삭제를 위해 일반적인 패턴을 제안 해주십시오. 아마도 인덱스에서 "삭제됨"으로 표시하고 문서를 업데이트하면됩니다. – user12384512
IndexWriter.deleteDocuments (Term)을 호출 한 다음 새 NRT 판독기를 열면 (applyAllDeletes에 true를 전달하면) 삭제가 반영되어야합니다. 당신은 올바른 기간을 가지고 있습니까? –