Lucene —— 搜索结果高亮显示
Posted wenniuwuren
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lucene —— 搜索结果高亮显示相关的知识,希望对你有一定的参考价值。
零. 前言
谷歌、 百度的搜索结果在关键词命中的时候会高亮显示(飘红), Lucene 也提供了高亮显示的实现, 借助 Lucene 的 Highlighter 类可以快速实现搜索结果高亮。
一. 代码示例
本例使用 Lucene 5.3.1 的包
package com.wenniuwuren.lucene; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.index.Term; import org.apache.lucene.search.Query; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.highlight.Highlighter; import org.apache.lucene.search.highlight.QueryScorer; import org.apache.lucene.search.highlight.SimplehtmlFormatter; import org.apache.lucene.search.highlight.SimpleSpanFragmenter; import java.io.StringReader; /** * 搜索结果高亮显示: 整体思路就是找到关键词, 然后在关键词两侧加入渲染标签, 达到高亮效果 * Created by wenniuwuren on 16/2/22. */ public class HighlightTest { public static void main(String args[]) { try { // 将被处理的文本 String searchResult = "chinese live in china"; // 创建查询 Query query = new TermQuery(new Term("country", "china")); // 对于符合条件的结果进行 score QueryScorer queryScorer = new QueryScorer(query, "country"); // 自定义高亮格式 SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<font color='red'>", "</font>"); Highlighter highlighter = new Highlighter(simpleHTMLFormatter, queryScorer); // 设置片段插入信息 highlighter.setTextFragmenter(new SimpleSpanFragmenter(queryScorer)); // 分词器, 这个只能分英文 StandardAnalyzer analyzer = new StandardAnalyzer(); // 结果处理 TokenStream tokenStream = analyzer.tokenStream("country", new StringReader(searchResult)); String finalResult = highlighter.getBestFragment(tokenStream, searchResult); System.out.println(finalResult); } catch (Exception e) { e.printStackTrace(); } } }
二. 运行结果
执行成功 ,china 关键词成功加上了 <font> 标签
以上是关于Lucene —— 搜索结果高亮显示的主要内容,如果未能解决你的问题,请参考以下文章