我不知道如何在Java中创建的Lucene法文分析器中将最小字符长度设置为3:
private final FrenchAnalyzer analyzer = new FrenchAnalyzer();
有人知道该怎么做吗?
谢谢,克里斯托夫
FrenchAnalyzer
被声明为final,因此无法扩展。我将通过复制源并将LengthFilter
添加到副本来解决此问题。
步骤如下(假设您使用的是最新版本的Lucene):
1)从GitHub LengthFilter
获取源类的副本。
2)适当地重命名该类(例如here),并相应地更改该类的所有构造函数。
3)添加以下导入:
CustomFrenchAnalyzer
4]在import org.apache.lucene.analysis.miscellaneous.LengthFilter;
和createComponents
方法中,添加新的长度过滤器。例如,假设您要根据您的问题删除少于3个字符的单词:
normalize
也对@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;
}
方法也做同样的事情。
这样,您的自定义类将自动利用法语分析器中内置的其他功能:
createComponents
(与Lucene JAR捆绑在一起。)并且可以使用分析器的任何非空构造函数来构造它,如果需要。
如果您使用的不是Lucene的兼容版本,则必须跟踪相关的Git分支,或从Lucene stop-words下载源JAR并从那里获取源。
希望有所帮助。