2012-02-06 4 views
1

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가 여전히 이전 색인을 가리키는 것처럼 보입니다.

답변

4

독자적으로 IndexReader를 열 필요가 없습니다. SearcherManager (IndexWriter에서 생성)를 작성한 다음 acquire/release를 사용하여 검색 자/판독기를 얻으십시오.

작가와 함께 문서를 추가/삭제 한 후에는 maybeReopen을 호출해야하고 다음 번 SearcherManager.acquire를 호출하면 반환 된 검색자가 변경 사항을 반영합니다. 문서를 색인하고 maybeReopen을 호출하기 위해 배경 스레드 (즉, 검색을 수행하는 스레드가 아닌)를 사용하는 것이 가장 좋습니다.

변경 사항을 표시하려면 IndexWriter.commit을 호출 할 필요가 없습니다. 내구성이 필요할 때만 호출하십시오 (예 : 모든 변경 사항이 디스크에 안전하게 저장되며 OS/JVM 충돌, 전원 손실, 9 등).

+0

예, 별도의 indexReader는 제거 된 레거시 코드입니다. 변경 사항이 적용될 때 정확히 알기 때문에 나에게 바람직하다. 동일한 스레드에서 maybeReopen을 호출한다. 이제 용어로 문서를 삭제하는 유일한 문제. 색인에서 문서가 삭제되지 않습니다. 삭제를 위해 일반적인 패턴을 제안 해주십시오. 아마도 인덱스에서 "삭제됨"으로 표시하고 문서를 업데이트하면됩니다. – user12384512

+0

IndexWriter.deleteDocuments (Term)을 호출 한 다음 새 NRT 판독기를 열면 (applyAllDeletes에 true를 전달하면) 삭제가 반영되어야합니다. 당신은 올바른 기간을 가지고 있습니까? –

0

NRT 검색을 사용하려면 매개 변수로 IndexWriter를 사용하는 다른 SearcherManager 생성자를 사용하십시오. 이 기사 확인 http://blog.mikemccandless.com/2011/11/near-real-time-readers-with-lucenes.html

+0

아무 것도 바뀌지 않습니다. Writer로 다른 생성자를 시도했습니다 – user12384512

+0

정말입니까? 또한 새로 추가 된 문서를 검색 할 수있는 권한이 필요하지 않습니다. – naresh

+0

예, 다른 구성으로 답변을 업데이트했습니다 – user12384512

0

나는 IndexReader를 생성해서는 안된다.

indexReader = IndexReader.open(w, true) 

이 줄을 제거하면 모든 것이 작동합니다. Dunno why yet

+0

초기 코드에서 indexReader가 필요한 위치는 어디입니까? – naresh

+0

더 이상 아무 것도 없기 때문에 매니저를 사용하기 시작했습니다. – user12384512

관련 문제