`
piziwang
  • 浏览: 240071 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

初学Lucene,写了个检索高亮显示

阅读更多

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
0
0
分享到:
评论

相关推荐

    lucene 多字段查询+文字高亮显示

    本话题聚焦于“Lucene多字段查询”和“文字高亮显示”,这两个特性在信息检索和数据挖掘中具有广泛应用。 首先,让我们深入理解“Lucene多字段查询”。在信息检索系统中,用户可能希望根据多个字段来过滤和排序结果...

    自己写的lucene分页高亮显示代码

    这个代码虽然有一些局限性,但对于初学者来说,它是了解 Lucene 分页和高亮基础的一个良好起点。通过深入学习和改进,可以将其优化为更健壮、高效的搜索引擎应用。祝你在学习 Lucene 的道路上不断进步,新年快乐!

    Lucene与数据库结合示例(加双关键字高亮)

    “Lucene与数据库结合示例(加双关键字高亮)”这个标题表明,我们将讨论如何将开源全文搜索引擎Lucene与关系型数据库MySQL整合在一起,并且在搜索结果中实现关键词高亮显示,以提升用户体验。这通常涉及到数据的...

    Lucene3.0增删改查和关键字高亮实例

    在这个“Lucene3.0增删改查和关键字高亮实例”项目中,我们将深入理解如何利用Lucene 3.0版本进行索引构建、文档的增删改查操作,并学习关键字高亮显示的实现方法。 首先,我们要了解**创建索引**的基本流程。在...

    供lucene初学者学习的几个类

    在IT领域,Lucene是一个非常...然而,Lucene的功能远不止于此,它还包括过滤、排序、分页、高亮显示、近似查询等高级特性。随着对这些基础类的深入理解和实践,你将逐步掌握Lucene的精髓,并能灵活应用到实际项目中。

    最新全文检索 lucene-5.2.1 入门经典实例

    Lucene是一个开源的全文检索库,由Apache软件基金会开发,广泛应用于各种信息检索系统。在5.2.1版本中,Lucene提供了更为高效和强大的搜索功能,为开发者提供了构建搜索引擎的坚实基础。本篇文章将深入探讨Lucene-...

    ssh集成Lucene4.7demo

    总的来说,这个“ssh集成Lucene4.7demo”项目提供了一个完整的示例,展示了如何在SSH框架下整合Lucene进行全文搜索,以及如何利用IKAnalyzer处理中文分词,同时实现搜索结果的高亮显示。对于初学者或希望深入理解...

    lucene in action 2nd edition, lucene in action 第二版 PDF

    Lucene是Apache软件基金会的一个开放源代码项目,它提供了一个高性能、全文检索的API。本书针对Lucene 2nd Edition进行了全面的解析,涵盖了从基础概念到高级应用的所有方面,旨在帮助读者理解和掌握全文检索的核心...

    Lucene索引搜索简介以及入门实例源码.rar

    这个压缩包中的内容可能是关于如何使用Lucene进行全文检索的一个基础教程和示例代码。 **一、Lucene的基本概念** 1. **文档(Document)**:在Lucene中,每个要被搜索的信息被看作一个文档,可以包含多个字段...

    Lucene3.5源码jar包

    5. **内存缓存与过滤器**:Lucene提供`Filter`类来处理如文档过滤、高亮显示等功能。同时,`BitSet`类用于在内存中高效地存储和操作文档集。 6. **倒排索引的优化**:在`MergePolicy`和`MergeScheduler`中,你可以...

    lucene 全包 包括源码

    除了核心模块,Lucene还提供了一些附加功能,如 SpellChecker(拼写检查)、Highlighter(高亮显示搜索结果)和Remote搜索支持。在源码中,你可以找到对应的实现类,如SpellChecker、Highlighter等。 这个压缩包中...

    Lucene 实战(第2版) PDF高清中文版

    读者还将学习如何实现高亮显示搜索结果、评分机制以及排序功能,提升用户的检索体验。 除了基本功能,本书还涵盖了高级主题,如多字段检索、近实时搜索、分布式搜索以及Lucene与其他技术的集成,如Solr和Elastic...

    lucene_demo例子

    《Lucene实战(第2版) PDF高清中文版.pdf》这本书是关于Apache Lucene的一本经典教程,适合初学者入门。Lucene是一个全文搜索引擎库,它提供了强大的文本搜索功能,被广泛应用于各种信息检索系统中。这本书详细介绍了...

    lucene3_ssh.rar_lucene

    6. **整合细节**:整合过程中,可能需要自定义Analyzer以适应特定的语言和业务需求,也可能需要使用Lucene的Highlighter来高亮显示搜索关键词。此外,为了保证数据的一致性,需要考虑索引与数据库之间的同步策略。 ...

    基于Lucene的搜索引擎

    这个课程设计创建了一个简单的搜索引擎,适合初学者了解和学习如何使用Lucene。 首先,我们要理解搜索引擎的基本工作原理。搜索引擎主要由以下几个核心组件构成: 1. **索引**:搜索引擎通过爬取网页(在本项目中...

    data.rar学习lucene需要的数据文件

    2. **高亮显示**:当用户搜索到匹配的关键词时,可以将这些词在结果文档中高亮显示,提升用户体验。 3. **分面搜索**:对数据进行分类,帮助用户快速过滤和导航,比如按照作者、时间、类型等进行筛选。 4. **实时...

    lucene.net+完全入门教程

    9. **扩展性**: 除了基本功能,Lucene.Net还提供了一些高级特性,如近实时搜索、faceted search(分类搜索)、 SpellChecker(拼写检查)和Highlighter(高亮显示搜索词)等。 10. **应用实例**: Lucene.Net常用于...

    lucene-core-2.9.4.jar.zip

    Lucene的核心功能包括文档的索引、搜索、排序和高亮显示等。在这个2.9.4版本中,开发者可以利用其强大的文本分析能力,对输入的文本进行分词、去除停用词、词形还原等一系列预处理操作,为后续的搜索提供高效的数据...

    基于lucene 的简单搜索引擎.rar

    总的来说,“基于lucene 的简单搜索引擎.rar”提供的示例可能涵盖以上提到的基本流程,帮助初学者理解如何在实际项目中运用Lucene构建一个简单的搜索引擎。通过学习和实践,你可以逐步掌握Lucene的精髓,为更复杂的...

    最全的lucene-2.4.0jar包

    Lucene是一个开源全文检索库,由Apache软件基金会开发并维护。它为Java开发者提供了一种高级文本搜索功能,使得在应用程序中实现复杂、高效的搜索引擎成为可能。标题中的“lucene-2.4.0jar包”指的是Lucene的2.4.0...

Global site tag (gtag.js) - Google Analytics