Lucene 4.7 --高亮显示

jar

lucene-analyzers-common-4.7.0.jar
lucene-analyzers-smartcn-4.7.0.jar
lucene-core-4.7.0.jar
lucene-queryparser-4.7.0.jar
lucene-memory-4.7.0.jar
lucene-queries-4.7.0.jar
lucene-highlighter-4.7.0.jar

先一段查询代码

Set<String> fields = new HashSet<String>();
fields.add("carId");
fields.add("carName");  

org.apache.lucene.document.Document document = searcher.doc(scoreDoc.doc, fields);
CarVO resultVO = new CarVO();
resultVO.setCarId(document.getValues("carId")[0]);
resultVO.setCarName(document.getValues("carName")[0]);
return resultVO; 

在这里,如果说我们通过carName搜索到了某个car,那么我们希望能够高亮显示这个carName中匹配的值,那么就对这个resultVO中setCarName时进行高亮处理,方法如下:

这样调用:

resultVO.setCarName(highlightFormat(document.getValues("carName")[0],"carName",query,scoreDoc,document));

实现方法:

private String highlightFormat(String value, String field,
            Query query, ScoreDoc scoreDoc, Document document) throws Exception {  

        QueryScorer scorer  = new QueryScorer(query,field);
        SimpleHTMLFormatter hlightFormater = new SimpleHTMLFormatter("<span class=\"hlight\">", "</span>");
        Highlighter hl = new Highlighter(hlightFormater,scorer);
        hl.setTextFragmenter(new SimpleSpanFragmenter(scorer));
        TokenStream stream  = TokenSources.getAnyTokenStream(
                searcher.getIndexReader(), scoreDoc.doc, field, document, analyzer);  

        String valueWithHighlight = hl.getBestFragment(stream, value);
        return valueWithHighlight;
    } 

searcher就是IndexSearcher,anlyzer是分词器,这个我一般都作为静态变量长时间持有

其余的这一“大堆”东西我并不打算做太多说明,一则是这里和原来的版本变化不大,二是基本按照这些点已经足够满足基本的开发应用需求了,唯一需要大家关注的,也需要大家自己处理得,就是

SimpleHTMLFormatter hlightFormater = new SimpleHTMLFormatter("<span class=\"hlight\">", "</span>");  

当然这里提醒一句,如果是你的carName这种属性是可以让用户自定义输入的,请一定要注意对注入攻击的拦截

时间: 2024-08-05 22:53:44

Lucene 4.7 --高亮显示的相关文章

Lucene —— 搜索结果高亮显示

零. 前言 谷歌. 百度的搜索结果在关键词命中的时候会高亮显示(飘红), Lucene 也提供了高亮显示的实现, 借助 Lucene 的 Highlighter 类可以快速实现搜索结果高亮. 一. 代码示例 本例使用 Lucene 5.3.1 的包 package com.wenniuwuren.lucene; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.standard.Sta

一步一步跟我学习lucene(11)---lucene搜索之高亮显示highlighter

highlighter介绍 这几天一直加班,博客有三天没有更新了,望见谅:我们在做查询的时候,希望对我们自己的搜索结果与搜索内容相近的地方进行着重显示,就如下面的效果 这里我们搜索的内容是"一步一步跟我学习lucene",搜索引擎展示的结果中对用户的输入信息进行了配色方面的处理,这种区分正常文本和输入内容的效果即是高亮显示: 这样做的好处: 视觉上让人便于查找有搜索对应的文本块: 界面展示更友好: lucene提供了highlighter插件来体现类似的效果: highlighter对

Lucene查询并高亮显示

1.导入jar包 2.创建实体Bean package com.zhishang.lucene; /**  * Created by Administrator on 2017/7/8.  */ public class HtmlBean {     private String title;     private String content;     private String url;     public void setTitle(String title) {         t

Lucene4.6+Solr4.6实战开发垂直搜索引擎 Lucene4.6实战视频教程

<基于Lucene4.6+Solr4.6+Heritrix1.14+S2SH实战开发从无到有垂直搜索引擎> 课程讲师:小叶子 课程分类:Java 适合人群:初级 课时数量:69课时 用到技术:Hibernate.Struts.Spring.jQuery.Lucene.Solr.Heritrix 涉及项目:百度文库搜索引擎 垂直搜索引擎是针对某一个行业的专业搜索引擎,是搜索引擎的细分和延伸,是对网页库中的某类专门的信息进行一次整合,定向分字段抽取出需要的数据进行处理后再以某种形式返回给用户.垂直

【课程分享】基于Lucene4.6+Solr4.6+Heritrix1.14+S2SH实战开发从无到有垂直搜索引擎

对这个课程有兴趣的朋友,能够加我的QQ2059055336和我联系,能够和您分享. 课程介绍:最有前途的软件开发技术--搜索引擎技术 搜索引擎作为互联网发展中至关重要的一种应用,已经成为互联网各个领域的制高点,其重要性不言而喻.搜索引擎领域也是互联网应用中不多见的以核心技术作为其命脉的领域,搜索引擎各个子系统是怎样设计的?这成为广大技术人员和搜索引擎优化人员密切关注的内容. 随着互联网行业兴起,大数据时代的到来,搜索引擎开发成为一项极富含金量的工作,市场对搜索软件开发project师的需求极其旺

【Lucene】Apache Lucene全文检索引擎架构之中文分词和高亮显示

前面总结的都是使用Lucene的标准分词器,这是针对英文的,但是中文的话就不顶用了,因为中文的语汇与英文是不同的,所以一般我们开发的时候,有中文的话肯定要使用中文分词了,这一篇博文主要介绍一下如何使用smartcn中文分词器以及对结果的高亮显示. 1. 中文分词 使用中文分词的话,首先到添加中文分词的jar包. <!-- lucene中文分词器 --> <dependency> <groupId>org.apache.lucene</groupId> <

Lucene基础(三)-- 中文分词及高亮显示

Lucene分词器及高亮 分词器 在lucene中我们按照分词方式把文档进行索引,不同的分词器索引的效果不太一样,之前的例子使用的都是标准分词器,对于英文的效果很好,但是中文分词效果就不怎么样,他会按照汉字的字直接分词,没有词语的概念. 使用分词的地方只需要把Analyzer实例化成我们第三方的分词器即可 中文分词有很多,这里使用IKAnalyzer 为例, 下载地址 https://git.oschina.net/wltea/IK-Analyzer-2012FF 现在下来后里面有一篇教程. 高

【Lucene】三个高亮显示模块的简单示例-Highlighter

Lucene针对高亮显示功能提供了两种实现方式,分别是Highlighter和FastVectorHighlighter 这里的三个示例都是使用Highlighter: 示例代码: package com.tan.code; import java.io.File; import java.io.IOException; import java.io.StringReader; import org.apache.lucene.analysis.TokenStream; import org.a

代码片段,Lucene的高亮显示

代码高亮显示是通过在搜索到的Term中把匹配了用户输入的关键字的周围加上一些标记来实现(比如,关键字是 "中华" 查到的一个Term是 "中华人民共和国",则把这个Term修改一下 把"中华" 两个字加粗,最终结果是这样的:  <b>中华</b>人民共和国 ) 下边是具体实现的代码片段: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 TopDocs t