lucene-搜索高亮提示(四)

hightlighter介绍

我们在查询的时候,希望对我们的搜索结果与搜索内容相近的地方进行着重显示,效果如下: image

这样做的好处:1.视觉上让人便于查找有搜索对应的文本块。2.界面展示更友好

lucene提供了highlighter插件来体现类似的效果

示例代码

package net.begincode.lucene.test;

import java.io.StringReader;
import java.nio.file.Paths;

import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.highlight.Fragmenter;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import org.apache.lucene.search.highlight.SimpleSpanFragmenter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

import net.begincode.lucene.analyzer.MyIkAnalyzer;

public class LuceneDemo3 {

	public static void main(String[] args) throws Exception {
		MyIkAnalyzer ik = new MyIkAnalyzer();
		Directory directory = FSDirectory.open(Paths.get("d:/begincodeIndex/test"));
		IndexWriterConfig config = new IndexWriterConfig(ik);
		IndexWriter iwriter = new IndexWriter(directory, config);
		// 读取索引
		DirectoryReader ireader = DirectoryReader.open(directory);
		// 创建索引检索对象 统一利用IndexSearcher来进行
		IndexSearcher searcher = new IndexSearcher(ireader);
		// 创建Query
		QueryParser parser = new QueryParser("title", ik);
		Query query = parser.parse("mysql");
		TopDocs hits = searcher.search(query, 100);
		QueryScorer scorer = new QueryScorer(query);// 查询得分
		SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<b><font color='red'>", "</font></b>");// 对查询的数据格式化;无参构造器的默认是将关键字加粗
		Highlighter highlighter = new Highlighter(simpleHTMLFormatter, scorer);// 根据得分和格式化
		highlighter.setTextFragmenter(new SimpleFragmenter(20));// 设置每次返回的字符数
		for (int i = 0; i < hits.scoreDocs.length; i++) {
			Document doc = searcher.doc(hits.scoreDocs[i].doc);
			String str = highlighter.getBestFragment(ik, "content", doc.get("content"));
			System.out.println(str);
		}
	}
}

输出

加载扩展词典:mydict.dic
加载扩展停止词典:surname.dic
null
null
为什么<b><font color='red'>mysql</font></b>安装失败为什么<b><font color='red'>mysql</font></b>安装失败为什么<b><font color='red'>mysql</font></b>安装失败<p></p>
<b><font color='red'>mysql</font></b> 反对撒发射点发射点<p></p>

转载于:https://my.oschina.net/u/2551035/blog/818165

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值