package it.heima.luceneInde; import org.apache.lucene.document.Document; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.Term; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.highlight.*; import org.apache.lucene.store.FSDirectory; import org.junit.Test; import org.wltea.analyzer.lucene.IKAnalyzer; import java.io.File; import java.io.IOException; public class HighlighterToLusene { @Test public void HighlighterToLucene1() throws IOException, InvalidTokenOffsetsException { //创建查询对象 IndexSearcher indexSearcher = new IndexSearcher(DirectoryReader.open(FSDirectory.open(new File("f:\\test")))); //执行查询,此处用词条查询 TermQuery termQuery = new TermQuery(new Term("content","格力"));//分词中有"格力"两个字,如果格力在title不能分词的中就查询不到了 //--------------------高亮开始--------------------------------------------------------- SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<font color='red'>", "</font>");//格式,高亮红色 QueryScorer queryScorer = new QueryScorer(termQuery);//中间内容 Highlighter highlighter = new Highlighter(simpleHTMLFormatter, queryScorer);//组合格式和中间内容 //--------------------高亮结束---------------------------------------------------------- TopDocs topDocs = indexSearcher.search(termQuery, 20); //获取结果集总数 int totalHits = topDocs.totalHits; ScoreDoc[] scoreDocs = topDocs.scoreDocs;//获取结果集分数数组; for (ScoreDoc scoreDoc : scoreDocs) { float score = scoreDoc.score;//获取分数 int id = scoreDoc.doc;//获取分数对应的id(此id是lusene系统自定义的,从0开始) Document doc = indexSearcher.doc(id); System.out.println(doc); String content = doc.get("content"); //---------------高亮获取----------------------------------- content = highlighter.getBestFragment(new IKAnalyzer(), "content", content); System.out.println("共获取到:"+totalHits+"条结果.--结果为:"+content); } } }
结果: