Lucene 升级到 8.0.0 版本的问题

public static final CharArraySet STOP_WORDS_SET = ENGLISH_STOP_WORDS_SET

常量将会被删除。

使用 ENGLISH_STOP_WORDS_SET 来替代。

ENGLISH_STOP_WORDS_SET 这个常量位于 EnglishAnalyzer 类中。

StandardAnalyzer 也会被删除。

需要使用类 ClassicFilter 来替代。

主要是上面 2 句话的写法需要改一下。

构造方法 new StopAnalyzer() 也会被删除。

Builds an analyzer which removes words in ENGLISH_STOP_WORDS_SET.

Use a constructor with a specific stop word set

方法需要改成上面那样。

1 Like

我在这个论坛上搜索了与 Lucene StopAnalyzer 和 ENGLISH_STOP_WORDS_SET 相关的内容,但没有找到直接相关的讨论。看起来这个论坛可能不是专门讨论 Lucene 或信息检索技术的。

根据你提供的信息,我的理解如下:

在新版本的 Lucene 中,StopAnalyzer 类的无参构造方法 new StopAnalyzer() 已经被标记为废弃(deprecated),将来会被移除。该构造方法会使用默认的英语停用词集 ENGLISH_STOP_WORDS_SET。

取而代之的是使用带有指定停用词集合的构造方法,形式如:

public StopAnalyzer(CharArraySet stopWords)

Javadoc中注释建议 “Use a constructor with a specific stop word set”。

所以如果你使用的是较新版本的Lucene,建议修改代码,显式地指定要使用的停用词集合,传给 StopAnalyzer 的构造方法,比如:

CharArraySet stopWords = EnglishAnalyzer.ENGLISH_STOP_WORDS_SET;
StopAnalyzer analyzer = new StopAnalyzer(stopWords);

这样可以让代码意图更明确,也避免使用废弃的API。

不过具体的修改方式还要看你的业务需求。如果默认的英语停用词集合已经够用,那么像上面那样修改就可以。如果你需要自定义停用词,那就需要自己构造 CharArraySet,传给构造方法。

希望我理解得没错,如有不清楚的地方欢迎继续追问。

1 Like