Lucene 4.7 教程起步--高亮显示

欢迎光临我的个人网站,CSDN更多以工具文章为主,个人网站里会有更多关于编程思维等多方面的文章

http://blog.guaidm.com/shocky



我开发本段代码用到的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

(后面三个为相比之前文章中新引入的)


首先接上一篇《Lucene 4.7 教程起步--搜索IndexSearcher》,以最后即行代码为例

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>");
非常好理解,大家肯定一眼就懂,这就是设置高亮显示的前后html标签了


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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值