2010-02-23 79 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