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

How to set the minimum length to 3 in the Lucene FrenchAnalyzer?

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

private final FrenchAnalyzer analyzer = new FrenchAnalyzer();

有人知道怎么做吗?

谢谢, 克里斯托夫

FrenchAnalyzer被声明为final,所以不能扩展。我会通过复制源代码并在副本中添加 LengthFilter 来解决这个问题。

步骤如下(假设您使用的是最新版本的Lucene):

  1. 从 GitHub here.

    获取来源 class 的副本
  2. 根据需要重命名 class(例如 CustomFrenchAnalyzer)并相应地更改所有 class 的构造函数。

  3. 添加以下导入:

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 方法也做同样的事情。

这样,您的自定义 class 将自动利用法语分析器内置的其他功能:

  • 法语省略过滤器
  • 默认的法语集 stop-words(与 Lucene JAR 捆绑在一起)。
  • 等等。

如果需要,它可以使用分析器的任何非空构造函数来构造。

如果您使用的不是兼容版本的 Lucene,则必须找到相关的 Git 分支,或者从 Lucene download page 下载源 JAR 并从那里获取源代码.