package com.github.btpka3.lucene.analysis;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.tokenattributes.*;
import org.apache.lucene.util.Attribute;
import org.junit.Test;
import java.io.IOException;
import java.io.StringReader;
import java.util.Iterator;
public class StandardAnalyzerTest {
@Test
public void test01() throws IOException {
Analyzer analyzer = new StandardAnalyzer();
StringReader strReader = new StringReader(" I love abc中国123 ");
TokenStream ts = analyzer.tokenStream("name", strReader);
// Assert.assertTrue(ts.hasAttribute(CharTermAttribute.class));
// CharTermAttribute termAtt = ts.getAttribute(CharTermAttribute.class);
//
// Assert.assertTrue(ts.hasAttribute(OffsetAttribute.class));
// OffsetAttribute offsetAtt = ts.getAttribute(OffsetAttribute.class);
//
// Assert.assertTrue(ts.hasAttribute(TypeAttribute.class));
// TypeAttribute typeAtt = ts.getAttribute(TypeAttribute.class);
//
// Assert.assertTrue(ts.hasAttribute(PositionIncrementAttribute.class));
// PositionIncrementAttribute posIncrAtt = ts.getAttribute(PositionIncrementAttribute.class);
//
// System.out.printf("%12s ~ %10s : %15s : %18s : %s : %n",
// "startOffset",
// "endOffset",
// "type",
// "positionIncrement",
// "term"
// );
// ts.reset();
// while (ts.incrementToken()) {
// System.out.printf("%12d ~ %10d : %15s : %18d : '%s' : %n",
// offsetAtt.startOffset(),
// offsetAtt.endOffset(),
// typeAtt.type(),
// posIncrAtt.getPositionIncrement(),
// termAtt.toString()
// );
//
// }
print(ts);
analyzer.close();
}
private void print(TokenStream ts) throws IOException {
Iterator<Class<? extends Attribute>> it = ts.getAttributeClassesIterator();
while (it.hasNext()) {
System.out.println(it.next());
}
CharTermAttribute termAtt = ts.getAttribute(CharTermAttribute.class);
PositionIncrementAttribute posIncrAtt = ts.getAttribute(PositionIncrementAttribute.class);
PositionLengthAttribute posLenAtt = ts.getAttribute(PositionLengthAttribute.class);
TypeAttribute typeAtt = ts.getAttribute(TypeAttribute.class);
OffsetAttribute offsetAtt = ts.getAttribute(OffsetAttribute.class);
TermToBytesRefAttribute byteRefAtt = ts.getAttribute(TermToBytesRefAttribute.class);
ts.reset();
while (ts.incrementToken()) {
System.out.printf("%3d ~ %3d : %15s : %3d : %3d : '%s' - '%s' : %n",
offsetAtt.startOffset(),
offsetAtt.endOffset(),
typeAtt.type(),
posIncrAtt.getPositionIncrement(),
posLenAtt.getPositionLength(),
new String(byteRefAtt.getBytesRef().bytes),
termAtt.toString()
);
}
}
}