使用Lucene的highlight包高亮显示检索关键字
2011-11-08 15:46
453 查看
在Lucene的org.apache.lucene.search.highlight包中提供了关于高亮显示检索关键字的工具。
使用百度、Google搜索的时候,检索结果显示的时候,在摘要中实现与关键字相同的词条进行高亮显示,百度和Google指定红色高亮显示。
需要的包有lucene-core-3.4.0.jar,IKAnalyzer3.2.8.jar,lucene-highlighter-3.4.0.jar
例子如下:
下面是运行结果:
共有记录5条
-----------------------------------------------
java基础
java开发手册
深入java开发
java案例精讲
程序设计java开发
-----------------------------------------------
<font color='red'>java</font>基础
<font color='red'>java</font>开发手册
深入<font color='red'>java</font>开发
<font color='red'>java</font>案例精讲
程序设计<font color='red'>java</font>开发
使用百度、Google搜索的时候,检索结果显示的时候,在摘要中实现与关键字相同的词条进行高亮显示,百度和Google指定红色高亮显示。
需要的包有lucene-core-3.4.0.jar,IKAnalyzer3.2.8.jar,lucene-highlighter-3.4.0.jar
例子如下:
package com; import java.io.IOException; import java.io.StringReader; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.queryParser.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.Highlighter; import org.apache.lucene.search.highlight.InvalidTokenOffsetsException; 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.store.Directory; import org.apache.lucene.store.LockObtainFailedException; import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.util.Version; import org.wltea.analyzer.lucene.IKAnalyzer; public class HightLightTest { static Directory dir = new RAMDirectory(); static Analyzer analyzer = new IKAnalyzer(); static String []bookNames = {"java开发手册","深入java开发","java基础","程序设计java开发","java案例精讲","hadoop项目实例汇总"}; public static void main(String []args)throws Exception { index(); TopDocs topDocs = searcher("bookName","java"); System.out.println("共有记录"+topDocs.totalHits+"条"); System.out.println("-----------------------------------------------"); display(topDocs); System.out.println("-----------------------------------------------"); highLightDisplay(topDocs,"java"); } //把查询到的图书进行显示,并把关键字进行高亮显示 public static void highLightDisplay(TopDocs topDocs,String keyWords) throws CorruptIndexException, IOException, ParseException, InvalidTokenOffsetsException{ IndexSearcher searcher = new IndexSearcher(dir); QueryParser queryParser = new QueryParser(Version.LUCENE_34,"bookName", analyzer); Query query = queryParser.parse(keyWords); ScoreDoc [] scoreDoc = topDocs.scoreDocs; SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<font color='red'>", "</font>"); Highlighter highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(query)); highlighter.setTextFragmenter(new SimpleFragmenter(1024)); for(int i=0;i<scoreDoc.length;i++){ Document doc = searcher.doc(scoreDoc[i].doc); String text = doc.get("bookName"); TokenStream tokenStream = analyzer.tokenStream("bookName",new StringReader(text)); String highLightText = highlighter.getBestFragment(tokenStream, text); System.out.println(highLightText); } searcher.close(); } //把查询到的图书进行输出 public static void display(TopDocs topDocs) throws CorruptIndexException, IOException{ IndexSearcher searcher = new IndexSearcher(dir); ScoreDoc [] scoreDoc = topDocs.scoreDocs; for(int i=0;i<scoreDoc.length;i++){ Document doc = searcher.doc(scoreDoc[i].doc); System.out.println(doc.get("bookName")); } searcher.close(); } //按照关键字查询图书 public static TopDocs searcher(String fieldName,String keyWords) throws CorruptIndexException, IOException, ParseException{ IndexSearcher searcher = new IndexSearcher(dir); QueryParser queryParser = new QueryParser(Version.LUCENE_34,fieldName,analyzer); Query query = queryParser.parse(keyWords); TopDocs topDocs = searcher.search(query, Integer.MAX_VALUE); searcher.close(); return topDocs; } //对图书名称进行索引 public static void index() throws CorruptIndexException, LockObtainFailedException, IOException{ IndexWriter index = new IndexWriter(dir,new IndexWriterConfig(Version.LUCENE_34, analyzer)); for(int i=0;i<bookNames.length;i++){ Document doc = new Document(); doc.add(new Field("bookName",bookNames[i],Field.Store.YES,Field.Index.ANALYZED)); index.addDocument(doc); } index.optimize(); index.close(); } }
下面是运行结果:
共有记录5条
-----------------------------------------------
java基础
java开发手册
深入java开发
java案例精讲
程序设计java开发
-----------------------------------------------
<font color='red'>java</font>基础
<font color='red'>java</font>开发手册
深入<font color='red'>java</font>开发
<font color='red'>java</font>案例精讲
程序设计<font color='red'>java</font>开发
相关文章推荐
- 利用Lucene.net实现检索并对检索关键字高亮显示
- asp.net中利用Lucene.net实现检索并对检索关键字高亮显示
- 搜索学习入门--使用LuceneHighlighter高亮显示Lucene检索结果的关键词
- 使用jquery的插件highlight并利用正则提取搜索引擎的关键字以高亮显示
- JAVA_WEB项目之Lucene实现检索结果排序和关键字在索引库中多字段查询结果进行高亮显示
- Lucene关键字高亮显示
- Lucene4.10使用教程(十):Lucene的关键字高亮
- 使用正则表达式实现搜索关键字高亮显示
- JQuery:页面文本匹配检索关键字 并加红字高亮显示
- android+lucene实现全文检索并高亮关键字
- 使用Lucene检索文档中的关键字
- 【Lucene】Apache Lucene全文检索引擎架构之中文分词和高亮显示4
- Lucene 对搜索关键字进行高亮显示
- lucene中处理将查询结果中的关键字高亮显示
- ASP.NET使用正则表达式实现搜索关键字高亮显示
- 使用正则表达式实现搜索关键字高亮显示
- 【Lucene】使用EasyUI和JQuery配合Lucene实现数据的分页查询以及高亮显示
- 【前端开发实例】HTML 检索内容 关键字 JS 高亮显示 -(二) 4000
- lucene-使用Highlighter高亮显示查询项
- 【Lucene】使用EasyUI和JQuery配合Lucene实现数据的分页查询以及高亮显示