【发布时间】:2013-07-01 14:55:59
【问题描述】:
我正在使用不带空格的文本索引大型文本文件。目前我有 ngram 方法来生成长度为 12 的字符串,然后我索引它们。同样的搜索方式,我从用户那里获取字符串,生成 12 的 ngram,然后在构建查询时使用它。在搜索时,请阅读 lucene 中存在的 ngram 标记器。但是找不到太多任何示例。
如何在 lucene 4.0 中实现 ngram 分词器?
【问题讨论】:
我正在使用不带空格的文本索引大型文本文件。目前我有 ngram 方法来生成长度为 12 的字符串,然后我索引它们。同样的搜索方式,我从用户那里获取字符串,生成 12 的 ngram,然后在构建查询时使用它。在搜索时,请阅读 lucene 中存在的 ngram 标记器。但是找不到太多任何示例。
如何在 lucene 4.0 中实现 ngram 分词器?
【问题讨论】:
使用NGramTokenizer 的最简单方法可能是使用this constructor,它只需要一个阅读器,以及最小和最大克大小。您可以将其合并到分析器中,类似于Analyzer docs 上的示例。比如:
Analyzer analyzer = new Analyzer() {
@Override
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
Tokenizer source = new NGramTokenizer(reader, 12, 12);
TokenStream filter = new LowercaseFilter(source);
return new TokenStreamComponents(source, filter);
}
};
【讨论】: