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
分享到:
相关推荐
本话题聚焦于“Lucene多字段查询”和“文字高亮显示”,这两个特性在信息检索和数据挖掘中具有广泛应用。 首先,让我们深入理解“Lucene多字段查询”。在信息检索系统中,用户可能希望根据多个字段来过滤和排序结果...
这个代码虽然有一些局限性,但对于初学者来说,它是了解 Lucene 分页和高亮基础的一个良好起点。通过深入学习和改进,可以将其优化为更健壮、高效的搜索引擎应用。祝你在学习 Lucene 的道路上不断进步,新年快乐!
“Lucene与数据库结合示例(加双关键字高亮)”这个标题表明,我们将讨论如何将开源全文搜索引擎Lucene与关系型数据库MySQL整合在一起,并且在搜索结果中实现关键词高亮显示,以提升用户体验。这通常涉及到数据的...
在这个“Lucene3.0增删改查和关键字高亮实例”项目中,我们将深入理解如何利用Lucene 3.0版本进行索引构建、文档的增删改查操作,并学习关键字高亮显示的实现方法。 首先,我们要了解**创建索引**的基本流程。在...
在IT领域,Lucene是一个非常...然而,Lucene的功能远不止于此,它还包括过滤、排序、分页、高亮显示、近似查询等高级特性。随着对这些基础类的深入理解和实践,你将逐步掌握Lucene的精髓,并能灵活应用到实际项目中。
Lucene是一个开源的全文检索库,由Apache软件基金会开发,广泛应用于各种信息检索系统。在5.2.1版本中,Lucene提供了更为高效和强大的搜索功能,为开发者提供了构建搜索引擎的坚实基础。本篇文章将深入探讨Lucene-...
总的来说,这个“ssh集成Lucene4.7demo”项目提供了一个完整的示例,展示了如何在SSH框架下整合Lucene进行全文搜索,以及如何利用IKAnalyzer处理中文分词,同时实现搜索结果的高亮显示。对于初学者或希望深入理解...
Lucene是Apache软件基金会的一个开放源代码项目,它提供了一个高性能、全文检索的API。本书针对Lucene 2nd Edition进行了全面的解析,涵盖了从基础概念到高级应用的所有方面,旨在帮助读者理解和掌握全文检索的核心...
这个压缩包中的内容可能是关于如何使用Lucene进行全文检索的一个基础教程和示例代码。 **一、Lucene的基本概念** 1. **文档(Document)**:在Lucene中,每个要被搜索的信息被看作一个文档,可以包含多个字段...
5. **内存缓存与过滤器**:Lucene提供`Filter`类来处理如文档过滤、高亮显示等功能。同时,`BitSet`类用于在内存中高效地存储和操作文档集。 6. **倒排索引的优化**:在`MergePolicy`和`MergeScheduler`中,你可以...
除了核心模块,Lucene还提供了一些附加功能,如 SpellChecker(拼写检查)、Highlighter(高亮显示搜索结果)和Remote搜索支持。在源码中,你可以找到对应的实现类,如SpellChecker、Highlighter等。 这个压缩包中...
读者还将学习如何实现高亮显示搜索结果、评分机制以及排序功能,提升用户的检索体验。 除了基本功能,本书还涵盖了高级主题,如多字段检索、近实时搜索、分布式搜索以及Lucene与其他技术的集成,如Solr和Elastic...
《Lucene实战(第2版) PDF高清中文版.pdf》这本书是关于Apache Lucene的一本经典教程,适合初学者入门。Lucene是一个全文搜索引擎库,它提供了强大的文本搜索功能,被广泛应用于各种信息检索系统中。这本书详细介绍了...
6. **整合细节**:整合过程中,可能需要自定义Analyzer以适应特定的语言和业务需求,也可能需要使用Lucene的Highlighter来高亮显示搜索关键词。此外,为了保证数据的一致性,需要考虑索引与数据库之间的同步策略。 ...
这个课程设计创建了一个简单的搜索引擎,适合初学者了解和学习如何使用Lucene。 首先,我们要理解搜索引擎的基本工作原理。搜索引擎主要由以下几个核心组件构成: 1. **索引**:搜索引擎通过爬取网页(在本项目中...
2. **高亮显示**:当用户搜索到匹配的关键词时,可以将这些词在结果文档中高亮显示,提升用户体验。 3. **分面搜索**:对数据进行分类,帮助用户快速过滤和导航,比如按照作者、时间、类型等进行筛选。 4. **实时...
9. **扩展性**: 除了基本功能,Lucene.Net还提供了一些高级特性,如近实时搜索、faceted search(分类搜索)、 SpellChecker(拼写检查)和Highlighter(高亮显示搜索词)等。 10. **应用实例**: Lucene.Net常用于...
Lucene的核心功能包括文档的索引、搜索、排序和高亮显示等。在这个2.9.4版本中,开发者可以利用其强大的文本分析能力,对输入的文本进行分词、去除停用词、词形还原等一系列预处理操作,为后续的搜索提供高效的数据...
总的来说,“基于lucene 的简单搜索引擎.rar”提供的示例可能涵盖以上提到的基本流程,帮助初学者理解如何在实际项目中运用Lucene构建一个简单的搜索引擎。通过学习和实践,你可以逐步掌握Lucene的精髓,为更复杂的...
Lucene是一个开源全文检索库,由Apache软件基金会开发并维护。它为Java开发者提供了一种高级文本搜索功能,使得在应用程序中实现复杂、高效的搜索引擎成为可能。标题中的“lucene-2.4.0jar包”指的是Lucene的2.4.0...