用于子字符串搜索的 Lucene Analyzer 分词器
Lucene Analyzer tokenizer for substring search
我需要一个可以执行以下操作的 Lucene Tokenizer。给定字符串 "wines bottle caps",以下查询应该成功
- 葡萄酒
- 博特
- 上限
- ottl
- aps
- 酒瓶
这是我目前所掌握的。我如何修改它才能工作?任何少于三个字符的查询都应该有效。
public class PorterAnalyzer extends Analyzer {
private final Version version;
public PorterAnalyzer(Version version) {
this.version = version;
}
@Override
@SuppressWarnings("resource")
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
final StandardTokenizer src = new StandardTokenizer(reader);
TokenStream tok = new StandardFilter(src);
tok = new LowerCaseFilter( tok);
tok = new StopFilter( tok, StandardAnalyzer.STOP_WORDS_SET);
tok = new PorterStemFilter(tok);
return new TokenStreamComponents(src, tok);
}
}
我认为您正在搜索 NGramTokenFilter。
尝试,例如:
tok=new NGramTokenFilter(tok,2,5);
我需要一个可以执行以下操作的 Lucene Tokenizer。给定字符串 "wines bottle caps",以下查询应该成功
- 葡萄酒
- 博特
- 上限
- ottl
- aps
- 酒瓶
这是我目前所掌握的。我如何修改它才能工作?任何少于三个字符的查询都应该有效。
public class PorterAnalyzer extends Analyzer {
private final Version version;
public PorterAnalyzer(Version version) {
this.version = version;
}
@Override
@SuppressWarnings("resource")
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
final StandardTokenizer src = new StandardTokenizer(reader);
TokenStream tok = new StandardFilter(src);
tok = new LowerCaseFilter( tok);
tok = new StopFilter( tok, StandardAnalyzer.STOP_WORDS_SET);
tok = new PorterStemFilter(tok);
return new TokenStreamComponents(src, tok);
}
}
我认为您正在搜索 NGramTokenFilter。
尝试,例如:
tok=new NGramTokenFilter(tok,2,5);