gpt4 book ai didi

Lucene 索引 : Exclude certain terms

转载 作者:行者123 更新时间:2023-12-01 07:57:09 27 4
gpt4 key购买 nike

如何根据长度排除某些术语?例如,不要将少于 3 个字母或多于 20 个字母的术语编入索引。还排除以数字开头的单词。

谢谢,

最佳答案

StandardAnalyzer 有一个您可以设置的 maxTokenLength 属性,我认为它已经消除了以数字开头的标记。但是,如果您有更具体的需求,您将需要制作自己的 Analyzer 和可能的 TokenFilter。与 Lucene 的文档相反,由于标记化过程的最高性能要求导致的不寻常的编码模式,实现这些类并不是“直截了当”的。例如,无法通过扩展来稍微修改 StandardAnalyzer 的行为,您必须从其中一个基类开始。如果您扩展与 StandardAnalyzer 相同的类, 您正在创建一个可重用 分析器,您必须格外小心以满足其契约(Contract)。

因此,首先尝试从现有过滤器中拼凑出一个分析器。例如,核心Lucene中提供了一个LengthFilter。如果失败,请实现您自己的过滤器并将其构建到您的分析器中。

这可能有助于您开始实现过滤器和分析器:

public class MyFilter extends FilteringTokenFilter 
{
private final CharTermAttribute termAtt = addAttribute(CharTermAttribute.class);

public MyFilter(TokenStream in) { super(false, in); }

protected boolean accept() {
final int len = termAtt.length();
final int d = termAtt.charAt(0) - '0':
return len >= 3 && len <= 20 && (d < 0 || d > 9);
}
}

public final class MyAnalyzer extends ReusableAnalyzerBase
{
@Override protected TokenStreamComponents createComponents(
String fieldName, Reader reader)
{
final Tokenizer source = new LowerCaseTokenizer(Version.LUCENE_35, reader);
return new TokenStreamComponents(source, new MyFilter(source));
}
}

关于Lucene 索引 : Exclude certain terms,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10059248/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com