想实现Google搜索关键字变红吗?使用Lucene自带的Highlighter就可以实现对原始文件摘要的提取工作。
Highlighter类有一个getBestFragment方法,这个方法有多个重载的方法,其中,使用:
public final String getBestFragment(Analyzer analyzer, String fieldName,String text)
就可以提取摘要,它实现了从指定的原始文件中,提取检索关键字出现频率最高的一段文字作为摘要,默认情况下
提取100个字符,同时加上自定义的高亮显示代码,又可实现关键字高亮显示。
代码 好下:
提醒下:要用Highlighter这个包 ,但是lucene-core-2.9.1.jar 这个包是不包Highlighter这个包的
在你下载的官方安装包 contrib\highlighter\lucene-highlighter-2.9.1.jar
唉,就因来这个包,又花了我不少时间找.已经遇到几次这种情况了
public static void main(String[] args) {
String prefixHTML = "<font color='red'>";
String suffixHTML = "</font>";
String content = "学JAVA到刘志猛博客JAVA为学习博客"; // 定义要建索的内容
String sql = "JAVA 博客"; // 要搜索的关键字
Hits hits = null; // Hits类――检索结果
Query query = null;
// RAMDirectory directory = new RAMDirectory();
IndexWriter writer;
try {
writer = new IndexWriter("c:\\indexM",
new SmartChineseAnalyzer(), true);
Document doc = new Document();
doc.add(new Field("field", content, Field.Store.YES,Field.Index.TOKENIZED,Field.TermVector.WITH_OFFSETS));
writer.addDocument(doc);
writer.close();
} catch (CorruptIndexException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (LockObtainFailedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}// 这要注意思下
// new StandardAnalyzer() 是标准过虑,new WhitespaceAnalyzer() 是空格过虑
// 如果用new WhitespaceAnalyzer() 就是把content="刘志猛 中华 人民国" 按空格来检索了
// 这方面主知识可以 查 分析器Analysis相关内容
// 建索引end
// 查询
IndexSearcher searcher;
try {
searcher = new IndexSearcher("c:\\indexM");
Analyzer anlyzer=new SmartChineseAnalyzer();
QueryParser parser = new QueryParser("field",anlyzer);
try {
query = parser.parse(sql);
hits = searcher.search(query);
for (int i = 0; i < hits.length(); i++) {
if (hits.length() > 0) {
Document document = hits.doc(i);
System.out.println("内容:" + document.get("field"));
String str = document.get("field");
// str = str.replaceAll(sql, "#" + sql + "#");// 在这我把关键字做了一个替换.这种方法可以模仿google
// 关键字变红 在这我有#替换了 如果是html页面,可以用html语言替换
int htmlLength = prefixHTML.length()+suffixHTML.length();
System.out.println("高亮HTML的总长度为"+htmlLength);
SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter(prefixHTML, suffixHTML);
Highlighter highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(query));
String highLightText;
try {
highLightText = highlighter.getBestFragment(anlyzer,"field",str);
System.out.println("★高亮显示第 "+(i+1) +" 条检索结果如下所示:");
System.out.println(highLightText);
System.out.println("显示第 "+(i+1) +" 条检索结果摘要的长度为(含高亮HTML代码):"+highLightText.length());
System.out.println(str);
System.out.println("+++++++"+highlighter);
} catch (InvalidTokenOffsetsException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
System.out.println("没有查到结!");
}
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (CorruptIndexException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
官方文章:
http://www.liuzm.com/article/java/91111b.htm
官方博客:
http://www.liuzm.com
分享到:
相关推荐
赠送jar包:lucene-highlighter-6.6.0.jar; 赠送原API文档:lucene-highlighter-6.6.0-javadoc.jar; 赠送源代码:lucene-highlighter-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-highlighter-6.6.0.pom;...
lucene2.9开发指南是为了帮助初级开发人员而编写整理的资料,包括了所有的核心技术,希望对大家有帮助
自己修改的基于lucene.net 2.9和highlighter插件的简单例子
lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮
本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记本人的Lucene2.9学习笔记本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记
lucene-highlighter.jar lucene-highlighter.jar
包含翻译后的API文档:lucene-highlighter-7.3.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-highlighter:7.3.1; 标签:apache、lucene、highlighter、中英对照文档、jar...
赠送jar包:lucene-highlighter-7.7.0.jar; 赠送原API文档:lucene-highlighter-7.7.0-javadoc.jar; 赠送源代码:lucene-highlighter-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-highlighter-7.7.0.pom;...
赠送jar包:lucene-highlighter-7.2.1.jar; 赠送原API文档:lucene-highlighter-7.2.1-javadoc.jar; 赠送源代码:lucene-highlighter-7.2.1-sources.jar; 赠送Maven依赖信息文件:lucene-highlighter-7.2.1.pom;...
赠送jar包:lucene-highlighter-7.3.1.jar; 赠送原API文档:lucene-highlighter-7.3.1-javadoc.jar; 赠送源代码:lucene-highlighter-7.3.1-sources.jar; 赠送Maven依赖信息文件:lucene-highlighter-7.3.1.pom;...
lucene 2.9 API , lucene API,lucene 学习资料,lucene2.9 CHM
lucene-highlighter-4.3.0.jar
实现中文分词的jar包:lucene-highlighter-3.6.1.jar
在Eclipse环境中运用java,Lucene建索引及查询关键字
Lucene.Net+盘古分词是一个常见的中文信息检索组合。但是随着盘古分词停止更新,与Lucene.Net3.0无法兼容。为了使得大家少走弯路,本人利用Lucene.Net2.9+盘古分词2.3搭建了一个Demo,里面包含了两个模块的源码,方便...
lucene-highlighter-3.0.1.jar 还在为找不到jar文件烦心吗,不用了到我空间来有你想要的,持续更新。
包含翻译后的API文档:lucene-highlighter-7.7.0-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-highlighter:7.7.0; 标签:apache、lucene、highlighter、中英对照文档、jar...
包含翻译后的API文档:lucene-highlighter-7.2.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-highlighter:7.2.1; 标签:apache、lucene、highlighter、中英对照文档、jar...
lucene-highlighter-2.9.0.jar
lucene-highlighter-3.5.0.jar lucene高亮包