2010-02-23 18 views
5

Po wykonaniu poniższego kodu zakładam, że plik stopwords jest odczytywany z systemu plików za każdym razem, gdy parsuję zapytanie. Zamiast tego, czy mogę ponownie użyć tej samej instancji analizatora zamiast tworzyć nową? Czy jest bezpieczny dla wątków? (Po dużo googling nie mogę znaleźć żadnych informacji na ten temat)Lucene.NET, StandardAnalyzer, stopwords i bezpieczeństwo wątków

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

Odpowiedz

3

Państwowej docs że tylko statyczne instancje StandardAnalyzer są bezpieczne dla wątków. QueryParser jest taki sam.

+0

Tak, zauważyłem to. Wydaje mi się dziwne, że Lucene przeładuje i przeanalizuje plik stopwords z systemu plików dla każdego zapytania. Ze względu na wydajność, ale także przypuszczam, że mogą wystąpić problemy z blokowaniem systemu plików, gdy 2 wątki odczytują plik w tym samym czasie. Iv widział także próbki, w których interpretowałbym to, że ponowne wykorzystanie analizatora jest możliwe, nawet jeśli notatka w dokumencie wydaje się temu przeczyć. –

+0

@Alex, nie będzie żadnych blokad ani innych problemów z dostępem, jeśli plik jest otwarty tylko do odczytu i nie jest zablokowany. – zihotki

+0

Tak, to prawda, zakładając, że Lucene robi to w ten sposób. Ponieważ notatka mówi, że klasa nie jest bezpieczna dla wątków, można przyjąć, że to założenie może być nieprawidłowe. –

Powiązane problemy