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

一、高亮显示用到的类

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值