Lucene Porter Stemmer线程安全吗?

时间:2011-09-20 10:01:30

标签: java multithreading lucene solr nlp

快速提问,来自Lucene包(Java)线程安全的porter stemmer?

我猜答案是肯定的,因为您需要设置当前字符串,调用干线方法然后获取当前块以获取词干。但也许我错过了一些东西 - 是否有线程安全的方法可以从Lucene中删除单个单词或字符串?

有经验的人是否知道实例化一个Porter Stemmer实例然后在该stemmer实例上使用synchronized块并执行setCurrent("..."); stem(); get();例程或者更快创建一个新的porter stemmer实例是否更快您要处理的每个字符串/文档。

在这种情况下,我有许多1000个文档,每个文档都被一个线程池占用(即1个线程有一个文档)。

编辑FYI - 示例使用模式:

import org.tartarus.snowball.ext.PorterStemmer;
...
private String stem(String word){
       PorterStemmer stem = new PorterStemmer();
       stem.setCurrent(word);
       stem.stem();
       return stem.getCurrent();
    }

干杯!

1 个答案:

答案 0 :(得分:3)

查看文档,似乎PorterStemmer类不可重入,所以如果我是你,我会为每个线程构建一个实例。如果词干是你的程序所做的主要事情之一,并且它没有其他方法可以让你的CPU核心保持忙碌,那么同步块似乎是个坏主意:程序会一直阻塞,等待词干分析器完成一份文件。我也不会为每个文档创建一个单独的线程;每个核心一个线程的线程池可能是更明智的选择。

(没有示例代码,因为我甚至无法从API文档中找出用法.RTFS以了解这个东西是如何工作的......)