package org.apache.solr.analysis;
import java.io.IOException;
import java.util.Map;
import org.apache.lucene.analysis.TokenFilter;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute;
import org.apache.lucene.analysis.tokenattributes.TypeAttribute;
import org.apache.lucene.analysis.util.TokenFilterFactory;
public class DiagnoseFilterFactory extends TokenFilterFactory {
private String msg;
public DiagnoseFilterFactory(Map<String,String> args) {
super(args);
msg = null;
if (args.containsKey("msg")) {
msg = args.remove("msg");
}
if (!args.isEmpty()) {
throw new IllegalArgumentException("Unknown parameter(s): " + args);
}
}
/*
* (non-Javadoc)
*
* @see
* org.apache.solr.analysis.TokenFilterFactory#create(org.apache.lucene.analysis
* .TokenStream)
*/
public DiagnoseFilter create(TokenStream input) {
return new DiagnoseFilter(input, msg);
}
}
final class DiagnoseFilter extends TokenFilter {
private int numTokens = 0;
private final PositionIncrementAttribute posIncrAtt;
private final TypeAttribute typeAtt;
private final CharTermAttribute termAtt;
private final OffsetAttribute offsetAtt;
private final String msg;
public DiagnoseFilter(TokenStream input, String msg) {
super(input);
this.msg = msg;
posIncrAtt = addAttribute(PositionIncrementAttribute.class);
typeAtt = addAttribute(TypeAttribute.class);
termAtt = addAttribute(CharTermAttribute.class);
offsetAtt = addAttribute(OffsetAttribute.class);
}
/*
* (non-Javadoc)
*
* @see org.apache.lucene.analysis.TokenStream#incrementToken()
*/
@Override
public boolean incrementToken() throws IOException {
if (!input.incrementToken()) return false;
System.out.println("stage:" + (msg != null ? msg : "null") +
" term=" + termAtt.toString() + " pos="
+ posIncrAtt.getPositionIncrement() + " type=" + typeAtt.type()
+ " offsetStart=" + offsetAtt.startOffset() + " offsetEnd="
+ offsetAtt.endOffset());
return true;
}
@Override
public void reset() throws IOException {
super.reset();
numTokens = 0;
}
}