Lucene检索高亮显示,直接上代码,使用了林良益的IKAnalyzer:
创建的索引:
import java.io.File;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.FSDirectory;
import org.wltea.analyzer.lucene.IKAnalyzer;
public class IndexFile {
private static final String INDEX_FILE = "E:\\lucene-indexs";
public static void createIndexFile()
{
String fielname = "content";
String text = "Struts是目前世界上所有使用Java语言进行J2EE项目开发的人员经常使用的基于MVC模式的Web项目开发框架之一。" +
"它也是目前最早的Web项目开发框架。由于它的易学易用,对入门者来说学习所花时间少,也简单容易上手,因此使用Struts的" +
"开发人群是目前所有Web项目开发框架使用人群中最大的。可是近几年,新的视图技术,如FreeMarker、Velocity技术。" +
"还有设计模式的大行其道。开发人员越来越觉得Struts在这些方面有先天的不足。并不能很优雅和优秀的完成Web项目开发工作。" +
"原因有很多种,一方面是Struts出现的时间比较早,现在流行的技术都是在Struts后出现的。因此必然导致Struts对新技术的" +
"支持不够。另一方面很多新兴的Web项目开发框架都是很好的体现了现有开发理念的使用。对Struts的影响和威胁都很大。" +
"这样很多近几年参加工作的IT从业人员都不喜欢使用Struts,而是去采用Tapestry、JSF等框架去进行他们的开发工作。" +
"值得庆幸的是Struts的开发人员也意识到了Struts的这些缺点,因此在2006年Struts和另外一个Web项目开发框架WebWork" +
"进行了合并,形成了新的Web项目开发框架Struts2。这个所谓的Struts2其实就是WebWork的一个新版本。" +
"一方面WebWork在IOC,基于接口编程,新的视图技术支持等方面具有先天优势,另一方面Struts的使用人群的巨大以及学习" +
"曲线的平缓,还有它的技术延续性。使这两个项目开发框架各取所长,互相补充,形成了一个更有竞争力,更具有健壮性的新框架。" +
"所以Struts并没有过时,它也已经进化成一个崭新的Web项目开发框架。" +
"本书这部分就针对Struts2的具体技术细节进行了详细附例的说明。而本章则把Struts和Struts2之间的“恩恩怨怨”以及同类" +
"的Web项目开发框架产品和Struts2的关系具体介绍。希望读者在学习Struts2技术之前,能对Struts2有清晰正确的认识和" +
"了解";
File indexFile = new File( INDEX_FILE );
IndexWriter indexWriter = null;
Document doc = null;
Analyzer analyzer = null;
try
{
analyzer = new IKAnalyzer();
indexWriter = new IndexWriter( FSDirectory.open( indexFile ), analyzer, true, IndexWriter.MaxFieldLength.LIMITED );
doc = new Document();
doc.add( new Field( fielname, text, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS ) );
indexWriter.addDocument(doc);
indexWriter.optimize();
indexWriter.close();
}
catch( Exception e )
{
e.printStackTrace();
}
}
public static void main(String[] args) {
createIndexFile();
}
}
检索索引文件:
import java.io.File;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.TermPositionVector;
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.QueryScorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import org.apache.lucene.search.highlight.TokenSources;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.wltea.analyzer.lucene.IKQueryParser;
import org.wltea.analyzer.lucene.IKSimilarity;
public class SearchFile {
private static final String INDEX_FILE = "E:\\lucene-indexs";
public static void search( String keyword )
{
File indexFile = new File( INDEX_FILE );
String fieldname = "content";
IndexSearcher indexSearcher = null;
Directory dir = null;
IndexReader reader = null;
Document doc = null;
try
{
dir = FSDirectory.open( indexFile );
indexSearcher = new IndexSearcher( dir, true );
indexSearcher.setSimilarity( new IKSimilarity() );
reader = IndexReader.open( dir, true );
Query query = IKQueryParser.parse( fieldname, keyword );
SimpleHTMLFormatter shf = new SimpleHTMLFormatter( "<b><font color='#ff0000'>", "</font></b>" );
Highlighter highlighter =new Highlighter( shf, new QueryScorer( query ) );
highlighter.setTextFragmenter(new SimpleFragmenter( 50 ));
TopDocs topDocs = indexSearcher.search( query, 50);
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for( ScoreDoc sdoc : scoreDocs )
{
int currIndex = sdoc.doc;
TermPositionVector tpv = (TermPositionVector)reader.getTermFreqVector( currIndex ,fieldname);
TokenStream tokenStream = TokenSources.getTokenStream(tpv, true);
doc = indexSearcher.doc( currIndex );
String content = doc.get( fieldname );
String result = highlighter.getBestFragments( tokenStream, content, 2, "......");
tokenStream.close();
System.out.println( "检索结果:\n"+result );
}
indexSearcher.close();
}
catch( Exception e )
{
e.printStackTrace();
}
finally
{
try
{
if( reader != null )
{
reader.close();
reader = null;
}
if( indexSearcher != null )
{
indexSearcher.close();
indexSearcher = null;
}
}
catch( Exception e )
{
e.printStackTrace();
}
}
}
public static void main(String[] args) {
search( "曲线平缓 视图 ioc 项目" );
}
}
检索结果是:
一个新版本。一方面WebWork在<b><font color='#ff0000'>IOC</font></b>,基于接口编程,新的<b><font color='#ff0000'>视图</font></b>技术支持等方面具有先天优势,另一方面Struts的使用人群的巨大以及学习<b><font color='#ff0000'>曲线</font></b>的<b><font color='#ff0000'>平缓</font></b>,还有它的技术延续性。使这两个<b><font color='#ff0000'>项目</font></b>开发框架各取所长
- 大小: 5 KB
分享到:
相关推荐
基于SpringBoot编写的一个Lucene测试Demo把匹配到的结果高亮摘要显示在前端jsp上
lucene 高亮显示. java 已测试
lucene高亮显示
NULL 博文链接:https://sunlongan666.iteye.com/blog/580380
Lucene实现全文检索
此资源配合《android+lucene实现全文检索并高亮关键字》使用http://download.csdn.net/detail/reality_jie/6335113
lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮
使用lucene技术,实现android的本地文档资源的全文检索功能,并实现关键字高亮
Lucene4做的全文检索,支持文件和数据库
Lucene全文检索案例Lucene全文检索案例Lucene全文检索案例Lucene全文检索案例
lucenetest.rar,lucene,全文检索,lucene例子 lucenetest.rar,lucene,全文检索,lucene例子lucenetest.rar,lucene,全文检索,lucene例子
基于Lucene的全文检索系统研究与开发基于Lucene的全文检索系统研究与开发基于Lucene的全文检索系统研究与开发
lucene实现文件检索Demo,
使用zend Framework的lucene进行全文检索
Lucene检索数据库支持中文检索,还不错的说
这个是自己写的lucene分页高亮程序虽然有些不足但是毕竟是自己研究半天总结出来的麻烦各位帮忙给点分哈哈祝大家新年快乐!
lucene3.5高亮
lucene全文检索需要的三个jar包:lucene-analyzers-3.6.1.jar lucene-core-3.6.1.jar lucene-highlighter-3.6.1.jar
Lucene是用java实现的、成熟的开源项目,是著名的Apache Jakarta大家庭的一员,并且基于Apache软件许可 [ASF, License]。...Lucene是一个高性能、可伸缩的信息搜索(IR)库。它可以为你的应用程序添加索引和搜索能力。
Lucene 是一个用Java 写的全文索 引引擎工具包,访问索引时间快,支持多用户访问,可以跨平台使用。文中研究了Lucene 系统结构和数据流,分析了 Lucene 的索引文件格式,实现了一个基于Lucene 文档检索的应用实例。