- 浏览: 771964 次
- 性别:
- 来自: 太原
博客专栏
-
Java编程Step-by...
浏览量:161216
文章分类
最新评论
-
liuwei1981:
尘土飞扬 写道取整的函数,返回值是double?测试下就能看出 ...
86.Math类的使用 -
尘土飞扬:
取整的函数,返回值是double?
86.Math类的使用 -
尘土飞扬:
终于清楚了Date和Calendar的来龙去脉谢谢
90.Java日期处理 -
谁说我不是会员:
liuwei1981 写道hupu_2014 写道根据你的执行 ...
65.对象的构造以及初始化 -
谁说我不是会员:
有的地方能优化,有的不能,不能一概而论。
有必要用StringBuilder的append代替String的+字符串连接运算么
使用lucene实现搜索结果 命中关键字高亮显示,大致流程与lucene 建立文件索引和针对索引进行搜索(lucene2.2版本)介绍的一致,只需在代码里稍作修改。
1.索引生成过程:(红色为修改部分,针对需要进行高亮显示索引内容,进行分词与关键字位置索引)
package demo.example.searcher; import java.io.*; import java.util.*; import org.apache.lucene.analysis.standard.*; import org.apache.lucene.index.*; import org.apache.lucene.document.*; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class Indexer { private static Log log = LogFactory.getLog(Indexer.class); public static void main(String[] args) throws Exception { File indexDir = new File("C:\\index"); File dataDir = new File("C:\\lucene\\src"); long start = new Date().getTime(); int numIndexed = index(indexDir, dataDir); long end = new Date().getTime(); System.out.println("use:" + (end - start)); } public static int index(File indexDir, File dataDir) { int ret = 0; try { IndexWriter writer = new IndexWriter(indexDir, new StandardAnalyzer(), true); writer.setUseCompoundFile(false); indexDirectory(writer, dataDir); ret = writer.docCount(); writer.optimize(); writer.close(); } catch (Exception e) { e.printStackTrace(); } return ret; } public static void indexDirectory(IndexWriter writer, File dir) { try { File[] files = dir.listFiles(); for (File f : files) { if (f.isDirectory()) { indexDirectory(writer, f); } else { indexFile(writer, f); } } } catch (Exception e) { e.printStackTrace(); } } public static void indexFile(IndexWriter writer, File f) { try { System.out.println("Indexing:" + f.getCanonicalPath()); Document doc = new Document(); Reader txtReader = new FileReader(f); doc.add(new Field("contents", txtReader,Field.TermVector.WITH_POSITIONS_OFFSETS)); doc.add(new Field("filename", f.getCanonicalPath(), Field.Store.YES, Field.Index.UN_TOKENIZED)); writer.addDocument(doc); } catch (Exception e) { e.printStackTrace(); } } }
2.搜索过程,红色的为修改部分,需要highlight和analysis的lucene的jar文件
package demo.example.searcher; import java.util.*; import org.apache.lucene.search.highlight.*; import org.apache.lucene.analysis.*; import org.apache.lucene.search.*; import org.apache.lucene.queryParser.*; import org.apache.lucene.analysis.standard.*; import org.apache.lucene.document.*; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class Searcher { private static Log log = LogFactory.getLog(Searcher.class); public static void main(String[] args) { String indexDir = "C:\\index"; String q = "查询关键字"; search(indexDir, q); } public static void search(String indexDir, String q) { try { IndexSearcher is = new IndexSearcher(indexDir); QueryParser queryParser = new QueryParser("contents", new StandardAnalyzer()); Query query = queryParser.parse(q); long start = new Date().getTime(); Hits hits = is.search(query); long end = new Date().getTime(); System.out.println("use:" + (end - start));
SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("<strong><font color='red'>", "</font></strong>"); SimpleFragmenter fragmenter = new SimpleFragmenter(60);
Highlighter highlighter = new Highlighter(formatter, new QueryScorer(q)); highlighter.setTextFragmenter(fragmenter);
int maxNumFragmentsRequired = 10; String fragmentSeparator = ""; TermPositionVector tpv = null; TokenStream tokenstream = null;
for (int i = 0; i < hits.length(); i++) { Document doc = hits.doc(i);
int id = hits.id(i);
System.out.println("The right file:" + doc.get("filename"));
tpv = (TermPositionVector) is.getIndexReader().getTermFreqVector(id, "contents");
tokenstream = TokenSources.getTokenStream(tpv);
String result = highlighter.getBestFragments(tokenstream, doc.get("contents"), maxNumFragmentsRequired, fragmentSeparator)
System.out.println("The right file context is :" + result);
} } catch (Exception e) { e.printStackTrace(); } } }
在输出结果中,文件内容中命中的关键字被加上了
"<strong><font color='red'>", "</font></strong>"
在网页中显示内容,即为黑体红字显示效果。
发表评论
-
cas4实现sso(一)cas简介
2015-01-15 16:59 971sso(单点登录)在实际的应用开发中经常会用到,特别是软件 ... -
为什么使用Java消息服务
2014-03-31 21:36 816Java消息服务有着众多 ... -
SSH+ExtJs完成CKEditor富文本编辑器整合
2013-05-13 11:31 2423最近根据项目需要,在当前项目开发框架中整合入了CKEdi ... -
4.判断jbpm流程实例流转完毕
2013-03-11 10:41 2943在使用jbpm4.x进行业务 ... -
3.JBPM与SSH框架整合
2013-02-27 10:13 1008使用Jbpm进行软件开发 ... -
2.Jbpm环境搭建
2012-12-10 15:28 13321.准备工作 首先我 ... -
90.Java日期处理
2012-12-07 09:16 29001 Date类 在编 ... -
89.文件操作初步
2012-12-06 09:19 22341 基本文件操作 ... -
88.容器类
2012-12-05 09:20 1978一个容器(container)是 ... -
87.String类
2012-12-04 09:24 1669在Java中,使用String和StringBuffer来表示 ... -
1.Jbpm初步了解
2012-12-03 10:40 884因为工作的关系,使用到了Jbpm来进行工作流程的应用开发。开始 ... -
86.Math类的使用
2012-12-03 10:15 1541在实际编程中,大量的数据运算是不可避免的。在Java类库中,已 ... -
85.IO操作入门
2012-11-30 09:25 1464多数应用程序在运行过程中要与用户进行交互,通常的交互方式是:用 ... -
83.Java编程语法基础说明
2012-11-22 09:17 1663到此为止,有关Java编程基础语法部分的内容就结束了。 ... -
82.处理异常
2012-11-20 09:39 21331.常见异常 下 ... -
81.Java异常概述
2012-11-19 09:40 1446没有人敢保证说它写的程序永远没有错。即使写的程序没有错,也不要 ... -
80.Java修饰符适用范围
2012-11-14 09:50 1634我们学习了不少的修饰符,如用于访问控制的public、prot ... -
79.内部类
2012-11-13 09:36 1474今天来说说一个非常 ... -
78.对象造型
2012-11-12 09:44 1440在讲述数据类型的时候,我们已经知道,各种简单数据类型之间是可以 ... -
77.instanceof运算符
2012-11-12 09:42 1346Java语言的多态性机制导致了引用变量的声明类型和其实际引用对 ...
相关推荐
在信息技术领域,搜索引擎的使用已经变得无处不在,而其中的关键技术之一就是如何有效地突出显示搜索结果中的关键字,这就是我们今天要探讨的主题——Lucene5中的Highlighter模块。Lucene是一个开源全文检索库,它...
标题 "Lunene分页关键字高亮显示" 暗示了我们正在讨论一个与搜索引擎或数据检索相关的项目,其中涉及到了Lunene(可能是Lucene的误拼),一种广泛使用的全文搜索引擎库,以及如何在搜索结果中实现分页和关键字高亮。...
在Android平台上实现全文检索并高亮关键字,常常需要用到开源全文搜索引擎Lucene。Lucene是一个高性能、全文本搜索库,提供了一个简单但强大的应用编程接口(API)用于索引和搜索文本。下面我们将深入探讨如何在...
5. **高亮显示关键字**:为了高亮显示搜索结果中的关键字,可以使用Highlighter组件。首先,需要将搜索结果的文档内容分词,然后使用QueryScorer计算每个词项的相关性得分。最后,使用Formatter类将得分高的关键字用...
总的来说,Lucene的多字段查询和文字高亮显示是提高用户体验和增强搜索功能的关键技术。它们使得用户能够更快地找到相关信息,并且更直观地看到搜索结果中的关键匹配点。通过深入学习和实践,你可以在自己的项目中...
在Eclipse环境中运用java,Lucene建索引及查询关键字
在这个“Lucene3.0增删改查和关键字高亮实例”项目中,我们将深入理解如何利用Lucene 3.0版本进行索引构建、文档的增删改查操作,并学习关键字高亮显示的实现方法。 首先,我们要了解**创建索引**的基本流程。在...
这个压缩包"安卓搜索相关相关-androidlucene实现全文检索并高亮关键字.rar"显然包含了一种利用Apache Lucene库在Android平台上实现这一功能的方法。Apache Lucene是一个强大的开源全文搜索引擎库,它提供了高效的...
“Lucene与数据库结合示例(加双关键字高亮)”这个标题表明,我们将讨论如何将开源全文搜索引擎Lucene与关系型数据库MySQL整合在一起,并且在搜索结果中实现关键词高亮显示,以提升用户体验。这通常涉及到数据的...
**SpringBoot+Lucene搜索结果高亮显示** 在现代Web应用程序中,强大的全文搜索引擎功能是不可或缺的,而Apache Lucene正是这样一个高效的、可扩展的开源全文检索库。在这个SpringBoot+Lucene的Demo中,我们将深入...
在实际应用中,我们还需要关注如何将Suggest与现有的Lucene搜索系统集成,以及如何设计合理的权重策略以提供最有价值的建议。同时,对于大型项目,可能需要考虑分布式Suggest服务,以应对高并发请求。 总之,Lucene...
在这个使用案例中,我们将深入探讨如何利用Lucene实现对Word文档中的关键字检索并高亮显示结果。 首先,我们需要理解Lucene的基本工作原理。Lucene通过建立倒排索引(Inverted Index)来加速查询。倒排索引是一种...
标题"IKAnalyzer LUCENE.4.9 中文分词的高亮显示"表明我们将探讨如何使用IKAnalyzer与Lucene 4.9版本相结合,实现搜索结果的关键词高亮功能。高亮显示有助于用户快速识别和理解搜索结果中的重要信息。 IKAnalyzer的...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
Lucene的高亮显示是指在搜索结果中,对匹配查询关键词的部分进行突出显示,通常用不同颜色或者加粗等方式实现。这不仅能够帮助用户迅速识别搜索结果的相关性,还能提高搜索结果的可读性和吸引力。 #### 二、高亮...
Lucene是一款高性能、全功能的文本搜索引擎库,其高亮显示功能主要用于在搜索结果中突出显示与查询条件相匹配的关键词,这不仅提升了用户体验,还能帮助用户快速定位关键信息。 ### 中文分词对性能的影响 在使用...
本篇文章将深入探讨如何利用Apache Lucene这个强大的全文搜索引擎库,结合Highlighter组件实现搜索结果的高亮显示。 Apache Lucene是一个高性能、可扩展的开源全文检索库,它提供了完整的索引和搜索功能,使得...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
本项目实例将详细介绍如何整合Lucene到一个用户新闻系统中,以实现高效的新闻搜索功能,并支持搜索关键词的高亮显示。 首先,我们需要了解Lucene的基本概念。Lucene是一个纯Java库,它提供了索引和搜索文本的工具,...
在描述中提到的"JAVA全局文件夹搜索案例",是指使用Lucene实现的Java程序,可以遍历指定的文件夹,对其中的文件内容进行索引,然后根据用户输入的关键字进行实时搜索。这样的案例有助于初学者理解Lucene如何与文件...