@Override
protected TokenStream normalize(String fieldName, TokenStream in) {
TokenStream result = new ElisionFilter(in, DEFAULT_ARTICLES);
result = new LowerCaseFilter(result);
// the following line is added:
result = new LengthFilter(result, 3, 9999);
return result;
}
1条答案
按热度按时间dced5bon1#
FrenchAnalyzer
被声明为final,所以它不能被扩展。我可以通过复制源代码并在副本中添加一个LengthFilter
来解决这个问题。步骤如下(假设您使用的是最新版本的Lucene):
1.从GitHub here获取源类的副本。
1.根据需要重命名该类(例如
CustomFrenchAnalyzer
),并相应地更改该类的所有构造函数。1.添加以下导入:
1.在
createComponents
和normalize
方法中,添加新的长度过滤器。例如,假设您要删除少于3个字符的单词,根据您的问题:对
createComponents
方法也执行相同的操作。这样,您的自定义类将自动利用法语分析器中内置的其他功能:
如果需要,可以使用分析器的任何非空构造函数来构造它。
如果您使用的不是兼容版本的Lucene,则必须找到相关的Git分支,或者从Lucene download page下载源代码JAR,并从那里获取源代码。