2010-02-23 12 views
5

Quando il codice viene eseguito di seguito, presumo che il file di stopword venga letto dal file system ogni volta che analizzo una query. Invece di farlo, posso riutilizzare la stessa istanza dell'analizzatore invece di crearne una nuova? È thread-safe? (Dopo molto googling non riesco a trovare alcuna informazione su questo)Lucene.NET, StandardAnalyzer, stopword e sicurezza thread

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

risposta

3

Lo stato docs che solo le istanze statiche di StandardAnalyzer sono thread-safe. QueryParser è lo stesso.

+0

Sì, l'ho notato. Mi sembra strano che Lucene ricarichi e analizzi il file stopwords dal file system per ogni query. A causa di motivi di prestazioni, ma suppongo anche che potrebbero esserci problemi di blocco del file system quando 2 thread leggono il file nello stesso momento. Iv ha anche visto dei campioni in cui vorrei interpretarlo che è possibile riutilizzare l'analizzatore, anche se la nota nel documento sembra contraddirla. –

+0

@Alex, non ci saranno blocchi o altri problemi di accesso se il file è aperto solo per la lettura e non è bloccato esclusivamente. – zihotki

+0

Sì, è vero, supponendo che Lucene faccia così. Dal momento che una nota dice che la classe non è thread-safe, si potrebbe supporre che tale ipotesi possa essere errata. –