Java 如何在Lucene中创建自定义分析器,使用文件中的自定义停止/常用字

Java 如何在Lucene中创建自定义分析器,使用文件中的自定义停止/常用字,java,lucene,analyzer,Java,Lucene,Analyzer,我试图在Lucene 8.3.0中创建一个自定义分析器,它使用词干分析,并使用文件中的自定义停止字过滤给定文本。 更清楚地说,我不想使用默认的停止字过滤器并在其上添加一些字,我只想使用stopWords.txt文件中的一组停止字进行过滤。 我该怎么做 这是我一直写到现在,但我不确定它是否正确 public class MyAnalyzer extends Analyzer{ //public class MyAnalyzer extends Analyzer { @Overrid

我试图在Lucene 8.3.0中创建一个自定义分析器,它使用词干分析,并使用文件中的自定义停止字过滤给定文本。 更清楚地说,我不想使用默认的停止字过滤器并在其上添加一些字,我只想使用stopWords.txt文件中的一组停止字进行过滤。 我该怎么做

这是我一直写到现在,但我不确定它是否正确

public class MyAnalyzer extends Analyzer{
    //public class MyAnalyzer extends Analyzer {
    @Override
    protected TokenStreamComponents createComponents(String fieldName) {
       // public TokenStream tokenStream(String fieldName, Reader reader) {
        Tokenizer tokenizer = new StandardTokenizer();
        TokenStream tokenStream = new StandardFilter(tokenizer);
        tokenStream = new LowerCaseFilter(tokenStream);
        tokenStream = new StopFilter(tokenStream,StopAnalyzer.ENGLISH_STOP_WORDS_SET);
        //Adding Porter Stemming filtering
        tokenStream = new PorterStemFilter(tokenStream);
        //return tokenStream;
        return new TokenStreamComponents(tokenizer, tokenStream);
    }
}

首先,我不确定结构是否正确,目前我使用StopAnalyzer中的StopFilter只是为了测试它(但是它不工作)

您需要读取该文件并将其解析为一个字符集以传递到过滤器中。具有一些内置方法,可用于将字符串列表转换为CharArraySet,如:

...
CharArraySet stopset = StopFilter.makeStopSet(myStopwordList);
tokenStream = new StopFilter(tokenStream, stopset);
...
它是出于内部目的而列出的,因此对于依赖此类是一个合理的警告,但是如果您不想处理将文件解析为列表的问题,您可以使用它将stopword文件解析为CharArraySet,例如:

...
CharArraySet stopset = WordlistLoader.getWordSet(myStopfileReader);
tokenStream = new StopFilter(tokenStream, stopset);
...

你能提供一些你已经尝试过的代码吗?这是我写的。但是我需要的是分析器只返回一个处理过的令牌流。我读了Lucene的文档,但我感到困惑