2010-02-23 8 views
5

Wenn der Code unten ausgeführt wird, gehe ich davon aus, dass die Stopwords-Datei jedes Mal aus dem Dateisystem gelesen wird, wenn ich eine Abfrage analysiere. Kann ich stattdessen die gleiche Instanz des Analysators wiederverwenden, anstatt einen neuen zu erstellen? Ist es threadsicher? (Nach viel googeln ich kann keine Informationen zu diesem Thema finden)Lucene.NET, StandardAnalyzer, Stoppwörter und Thread-Sicherheit

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

Antwort

3

docs Zustand, der nur statische Instanzen von StandardAnalyzer sind threadsicher. QueryParser ist das gleiche.

+0

Ja, das ist mir aufgefallen. Es erscheint mir nur seltsam, dass Lucene die Stopword-Datei für jede Abfrage neu aus dem Dateisystem liest und analysiert. Aus Performancegründen, aber ich denke, es kann auch Dateisystem-Locking-Probleme geben, wenn 2 Threads die Datei gleichzeitig lesen. Ich habe auch Proben gesehen, bei denen ich es interpretieren würde, dass die Wiederverwendung des Analysators möglich ist, obwohl die Notiz im Dokument dem zu widersprechen scheint. –

+0

@Alex, es wird keine Sperrung oder andere Zugriffsprobleme geben, wenn die Datei nur zum Lesen geöffnet wird und nicht exklusiv gesperrt ist. – zihotki

+0

Ja, das stimmt, wenn man davon ausgeht, dass Lucene so vorgeht. Da ein Hinweis besagt, dass die Klasse nicht Thread-sicher ist, könnte man annehmen, dass diese Annahme falsch ist. –