2010-02-23 3 views
5

아래 코드가 실행될 때마다 쿼리를 구문 분석 할 때마다 스톱 워드 파일이 파일 시스템에서 읽히는 것으로 가정합니다. 이 작업을 수행하는 대신 새 분석기를 만드는 대신 분석기의 동일한 인스턴스를 재사용 할 수 있습니까? 스레드로부터 안전합니까?Lucene.NET, StandardAnalyzer, 스톱 워드 및 스레드 안전

var stopwordsFile = new FileInfo("C:\MyStopWordsFile.txt"); 
var analyzer = new StandardAnalyzer(stopwordsFile); 
var queryParser = new QueryParser("", analyzer); 
var query = queryParser.Parse(stringToParse); 

답변

3

StandardAnalyzer의 정적 인스턴스는 스레드로부터 안전합니다 워드 프로세서 상태를 (많은 인터넷 검색 후 나는이에 대한 정보를 찾을 수 없습니다). QueryParser은 동일합니다.

+0

예, 알아 챘습니다. Lucene이 모든 쿼리에 대해 파일 시스템에서 불용어 파일을 다시로드하고 구문 분석하는 것은 이상하게 보입니다. 성능상의 이유로 인해,하지만 또한 파일 시스템 잠금 문제가있을뿐만 아니라 동시에 2 스레드가 파일을 읽을 때있을 것 같아요. Iv는 심지어 해석기를 재사용하는 것이 가능하다고 해석 할 샘플을 보았습니다. 비록 문서의 주석이이를 반박하는 것처럼 보였습니다. –

+0

@Alex, 파일이 읽기 전용으로 열리고 배타적으로 잠겨 있지 않은 경우 잠금 또는 기타 액세스 문제가 발생하지 않습니다. – zihotki

+0

예, 사실입니다. Lucene이 그렇게하는 것으로 가정합니다. 메모에 클래스는 스레드로부터 안전하지 않다고되어 있으므로 해당 가정이 틀릴 수도 있다고 생각할 수 있습니다. –