全文検索エンジンLuceneの実験。
公開されていた例(≒N-gramでHighlighterがうまく動かない)をScalaでリライトしてみた。
- - - -
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.Scorer;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.TextFragment;
object HighlightRunner {
val CONTENT = "ひふみひふみひふみひふみひひふひふみろひふみろ";
val QUERY_STRING = "ひふみひふみ";
val F = "f";
var analyzer : Analyzer = new CJKAnalyzer();
def main(args: Array[String]) {
try{
var qp :QueryParser = new QueryParser( F, analyzer );
var query :Query = qp.parse( QUERY_STRING );
var scorer :Scorer = new QueryScorer( query, F );
var h :Highlighter = new Highlighter( scorer );
println( h.getBestFragment( analyzer, F, CONTENT ) );
} catch {
case e:StringIndexOutOfBoundsException => ()
case e:Exception => {
e.printStackTrace
}
} finally {
}
}
}