java Lucene Porter Stemmer线程安全?
快速提问,porter源于Lucene packages(Java)线程安全吗
我猜答案是否定的,因为您需要设置当前字符串,调用stem方法,然后获取当前块以获取词干单词。但也许我遗漏了一些东西——是否有线程安全的方法可以从Lucene中提取单个单词或字符串
有经验的人知道,实例化一个Porter词干分析器实例,然后在该词干分析器实例上使用同步块并执行setCurrent("..."); stem(); get();
例程是更快,还是为要处理的每个字符串/文档创建一个新的Porter词干分析器实例更快
在本例中,我有1000多个文档,每个文档都被一个线程池占用(即,一个线程有一个文档)
编辑供参考-示例使用模式:
import org.tartarus.snowball.ext.PorterStemmer;
...
private String stem(String word){
PorterStemmer stem = new PorterStemmer();
stem.setCurrent(word);
stem.stem();
return stem.getCurrent();
}
干杯
# 1 楼答案
看看文档,似乎^{} 类不是可重入的,所以如果我是你,我会为每个线程构建一个实例。如果词干分析是程序的主要功能之一,并且没有其他方法让CPU内核保持忙碌,那么同步块似乎是个坏主意:程序会一直在阻塞,等待词干分析完成一个文档。我也不会为每个文档创建一个线程;每个核心有一个线程的线程池可能是更明智的选择
(没有示例代码,因为我甚至无法从API docs.RTFS中找出它的用法,以了解它是如何工作的……)