Lucene筆記34-Lucene的擴充套件-高亮基礎
阿新 • • 發佈:2018-11-29
一、高亮顯示用到的類
- Fragmenter:拿到一個字串之後,對字串進行分段
- QueryScorer:查詢評分,將評分最高的展示給使用者
- Encoder:顯示出來的文字有兩種,一種是SimpleEncode(忽略掉HTML標籤),一種是DefaultEncode(展示HTML標籤)
- Formatter:自定義標註高亮文字標籤
二、程式碼例項
這裡簡單展示下高亮類的使用,對一個句子做了高亮顯示處理。可以發現輸出的內容中,關鍵詞被加上了span標籤。
package com.wsy; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.index.Term; import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.Query; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.highlight.*; import org.apache.lucene.util.Version; import org.wltea.analyzer.lucene.IKAnalyzer; import java.io.IOException; public class HighLightTest { private static String text = "我愛北京天安門, 天安門上太陽升, 偉大領袖毛主席, 指引我們向前進!"; public void highLight1(String text) { Analyzer analyzer = new IKAnalyzer(); try { // 只能對一個詞新增高亮 // TermQuery query = new TermQuery(new Term("content", "天安門")); // 可以對多個詞新增高亮,多個關鍵詞用空格分隔開 Query query = new QueryParser(Version.LUCENE_35, "content", analyzer).parse("北京 偉大"); QueryScorer queryScorer = new QueryScorer(query); Fragmenter fragmenter = new SimpleSpanFragmenter(queryScorer); Formatter formatter = new SimpleHTMLFormatter("<span style='color:red'>", "</span>"); Highlighter highlighter = new Highlighter(formatter, queryScorer); highlighter.setTextFragmenter(fragmenter); String highLightString = highlighter.getBestFragment(analyzer, "content", text); System.out.println(highLightString); } catch (IOException e) { e.printStackTrace(); } catch (InvalidTokenOffsetsException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } } public static void main(String[] args) { HighLightTest highLightTest = new HighLightTest(); highLightTest.highLight1(text); } }