2014-11-10 8 views
1

사용자가 Lucene.NET (v3.0.3.0)에 데이터를 삽입하고 몇 초 후에 새 데이터를 쿼리 할 수 ​​있어야하는 응용 프로그램이 있습니다.Lucene.Net Searcher가 새 문서를 찾지 못함

현재, 실행되는 모든 쿼리에 대해 IndexSearcher의 새 인스턴스를 만들고 있습니다. 이것은 느린 것으로 알려져 있으며 성능상의 이유로 IndexSeacher의 캐시 된 인스턴스를 사용하는 것이 좋습니다.

IndexSearcher를 캐시에 보관하자마자 쿼리가 이전 데이터를 참조하는 것처럼 보입니다. 새로 추가 된 문서를 찾을 수 없습니다.

나는

searcher.IndexReader.Reopen(); 

를 호출하려하지만 도움이되지 않았다.

Lucene.Net.Store.Directory dir = Lucene.Net.Store.FSDirectory.Open(@"c:\lucene\test"); 
searcher = new IndexSearcher(dir); 

어떻게 내가 모든 쿼리에 대한 새로운 IndexSearcher를 다시 만들 필요없이 최신의 데이터를 읽을 수 있는지 확인 할 수 있습니다 : 다음 코드 검색은 최신 문서를 반환해야 할 것입니다 만?

답변

1

좋아요. 알아 냈습니다.

내 실수로 IndexReader.Reopen()이 IndexReader를 다시 열 것이라고 생각했습니다. 사실, 그렇지 않습니다. 대신이 메서드는 새 IndexSearcher 인스턴스를 만드는 데 사용할 수있는 새 IndexReader를 반환합니다.

여러 스레드를 사용하면이 작업이 다소 복잡해질 수 있습니다. Lucene 3.5에는이를 지원하는 SearchManager 클래스가 있지만 현재 3.0.3 버전의 Lucene.NET 3.0을 사용하고 있습니다. https://github.com/NielsKuhnel/NrtManager/tree/master/source/Lucene.Net.Contrib.Management

:

다음 프로젝트는 루씬 3.0에서 사용할 수있는 searchManager 클래스의 포트를 제공