2010-02-23 78 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還看到了我認爲可以重複使用分析儀的樣本,儘管文檔中的說明似乎與此相矛盾。 – 2010-02-23 10:16:20

+0

@Alex,如果文件僅用於讀取而不是唯一鎖定,則不會出現鎖定或其他訪問問題。 – zihotki 2010-02-23 10:40:47

+0

是的,沒錯,假設Lucene是這樣做的。由於說明該類不是線程安全的,因此可能會認爲該假設可能不正確。 – 2010-02-23 11:07:35