Это продолжение моего предыдущего вопроса .Я использую Lucene 3.6.1 и хочу создать собственный анализатор, который создает токены, как показано ниже: -
I / P текст: - foo bar
Токены: - f,fo,foo,b,ba,bar
I / P текст: - HEllo 123
Токены: - h,he,hel,hell,hello,1,12,123
.
По сути, он преобразует текст в нижний регистр, а затем использует маркер n-граммы ребрафильтр.
Ниже приведен мой Java-код для пользовательского анализатора.
@Override
public TokenStream tokenStream(String fieldName, Reader reader) {
TokenStream stream = new KeywordTokenizer(reader);
TokenStream result = new EdgeNGramTokenFilter(stream, EdgeNGramTokenFilter.Side.FRONT, 1, 30);
//OffsetAttribute offsetAttribute = result.addAttribute(OffsetAttribute.class);
CharTermAttribute charTermAttribute = result.addAttribute(CharTermAttribute.class);
try {
result.reset();
while (result.incrementToken()) {
//int startOffset = offsetAttribute.startOffset();
//int endOffset = offsetAttribute.endOffset();
System.out.println(charTermAttribute.toString());
}
result.end();
result.close();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
Но он возвращает ниже токенов для foo bar
.
f
fo
foo
foo
foo b
foo ba
foo bar
Дайте мне знать, чтоМне не хватает в моем коде.