Lucene笔记34-Lucene的扩展-高亮基础

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36059561/article/details/83930168

一、高亮显示用到的类

  • 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);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36059561/article/details/83930168
今日推荐