如何在Lucene FrenchAnalyzer中将最小长度设置为3?

oknrviil  于 2022-11-07  发布在  Lucene
关注(0)|答案(1)|浏览(139)

我不知道如何在我用Java创建的Lucene法语分析器中将最小字符长度设置为3,如下所示:

private final FrenchAnalyzer analyzer = new FrenchAnalyzer();

有人知道怎么做吗?
谢谢你,克里斯多夫

dced5bon

dced5bon1#

FrenchAnalyzer被声明为final,所以它不能被扩展。我可以通过复制源代码并在副本中添加一个LengthFilter来解决这个问题。
步骤如下(假设您使用的是最新版本的Lucene):
1.从GitHub here获取源类的副本。
1.根据需要重命名该类(例如CustomFrenchAnalyzer),并相应地更改该类的所有构造函数。
1.添加以下导入:

import org.apache.lucene.analysis.miscellaneous.LengthFilter;

1.在createComponentsnormalize方法中,添加新的长度过滤器。例如,假设您要删除少于3个字符的单词,根据您的问题:

@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方法也执行相同的操作。
这样,您的自定义类将自动利用法语分析器中内置的其他功能:

  • 法语省略过滤器
  • 默认的法语stop-words集(与Lucene JAR绑定)。
  • 和/或其他信息。

如果需要,可以使用分析器的任何非空构造函数来构造它。
如果您使用的不是兼容版本的Lucene,则必须找到相关的Git分支,或者从Lucene download page下载源代码JAR,并从那里获取源代码。

相关问题