`
out_println
  • 浏览: 14427 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

lucene应用摘要

阅读更多
Lucene做为一个开源的搜索引擎框架,它不但易于学习,而且为开发人员提供了丰富的API来完成用为开发人员不同的需求,下面是Lucene一些主要应用的代码:
建索引:
try{
			//将索引写入文件,标准分词器,field长度为有限的
			writer = new IndexWriter(FSDirectory.open(index),
					new StandardAnalyzer(Version.LUCENE_CURRENT), create,
					IndexWriter.MaxFieldLength.LIMITED);
			
			if(obj!=null){
				List list=(List)obj;
				for(int i=0;i<list.size();i++){
					doc = new Document();
					articleInfo =(ArticleInfo)list.get(i);
					
					Field id= new Field("id",String.valueOf(articleInfo.getId()),
							Field.Store.YES,Field.Index.ANALYZED);  //保存id值,并为其建立索引
					Field title = new Field("title",articleInfo.getTitle() ,
							Field.Store.YES, Field.Index.ANALYZED); //保存内容,并为其建立索引
					Field context = new Field("contents", articleInfo.getContents(),
							Field.Store.YES, Field.Index.ANALYZED); //保存内容,并为其建立索引
					Field url = new Field("url", articleInfo.getPath(), Field.Store.YES,
							Field.Index.NO);                                             //保存内容,不建立索引
					
					doc.add(id);
					doc.add(title);
					doc.add(context);
					doc.add(url);
					//写入索引文件
					writer.addDocument(doc);
				}
			}
			writer.optimize();
			writer.close();
		}catch(Exception ex){
			ex.printStackTrace();
		}


更新索引:
try {
				//将索引写入文件,标准分词器,field长度为有限的,create=false
				writer = new IndexWriter(FSDirectory.open(index),
						new StandardAnalyzer(Version.LUCENE_CURRENT), false,
						IndexWriter.MaxFieldLength.LIMITED);
				if(obj!=null){
					list = (List)obj;
					for(int i=0;i<list.size();i++){
						articleInfo = (ArticleInfo)list.get(i);
						System.out.println("update id is :"+articleInfo.getId());
						term = new Term("id",String.valueOf(articleInfo.getId()));
						
						Field id= new Field("id",String.valueOf(articleInfo.getId()),
								Field.Store.YES,Field.Index.ANALYZED);   //保存id值,并为其建立索引
						Field title = new Field("title",articleInfo.getTitle() ,
								Field.Store.YES, Field.Index.ANALYZED);    //保存内容,并为其建立索引
						Field context = new Field("contents", articleInfo.getContents(),
								Field.Store.YES, Field.Index.ANALYZED);     //保存内容,并为其建立索引
						Field url = new Field("url", articleInfo.getPath(), Field.Store.YES,Field.Index.NO);                                           //保存内容,不建立索引
						
						doc = new Document();
						doc.add(id);
						doc.add(title);
						doc.add(context);
						doc.add(url);
						//更新索引
						writer.updateDocument(term, doc);
//						writer.addDocument(doc);
						
					}
				}
				writer.optimize();
				writer.close();
			}catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}


删除索引:
try {
				Directory directory=FSDirectory.open(index);
				//该文件夹下是否存在索引文件
				if(IndexReader.indexExists(directory)){
					//因为要执行删除操作,所以read-only=false
					reader = IndexReader.open(directory, false);
					//判断是否最新的索引信息
					if(!reader.isCurrent()){
						//如果不是,重新获取索引信息
						reader.reopen();
					}
					if(obj!=null){
						list = (List)obj;
						for(int i=0;i<list.size();i++){
							info=(ArticleInfo)list.get(i);
							System.out.println("id is: "+info.getId());
							term = new Term("id", String.valueOf(info.getId()));
							//根据doc序号删除索引
//							reader.deleteDocument(1);
							//根据id删除索引
							reader.deleteDocuments(term);
						}
					}
				}
				reader.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}


最后,实现对索引的搜索:
			Directory directory= FSDirectory.open(new File(indexFile));
			//判断文件夹下是否存在索引文件
			if(IndexReader.indexExists(directory)){
				//索引存在
				indexReader = IndexReader.open(directory, true);
				//判断是否为最新索引
				if(!indexReader.isCurrent()){
					//获取最新索引
					indexReader.reopen();
				}
				
				Searcher searcher = new IndexSearcher(indexReader);
				//创建标准分词器
				Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
				//复合字段查询
				MultiFieldQueryParser parser = new MultiFieldQueryParser(fieldNames,analyzer);
				//查询关键字解析
				Query query = parser.parse(queryStr);
				//查询前100条记录
				TopDocs docs =searcher.search(query, count);
				ScoreDoc[] score = docs.scoreDocs;
				//关键字高亮显示
			    SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<font color='red'>", "</font>");
			    Highlighter highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(query));
			    //截取含有关键字的文本片段,
			    highlighter.setTextFragmenter(new SimpleFragmenter(50));
			    System.out.println("length is: "+score.length);
			    if(score.length>0){
			    	list = new ArrayList<ArticleInfo>();
			    	for(int i=0;i<score.length;i++){
			    		doc = searcher.doc(score[i].doc);
			    		
			    		sum = highlighter.getBestFragment(analyzer, "contents", doc.get("contents"));
			    		if(sum==null || "".equals(sum)){
			    			sum = highlighter.getBestFragment(analyzer, "title", doc.get("title"));
			    		}
			    		System.out.println("sum is: "+sum);
			    		articleInfo = new ArticleInfo();
			    		articleInfo.setId(Integer.parseInt(doc.get("id")));
			    		articleInfo.setTitle(doc.get("title"));
			    		articleInfo.setContents(sum);
			    		articleInfo.setPath(doc.get("url"));
			    		list.add(articleInfo);
			    	}
			    }
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
分享到:
评论
3 楼 cf2huihui 2013-03-02  
不错,不错
2 楼 out_println 2012-05-26  
u_lie 写道
大哥~! 搜索部分上面的的代码怎么写的啊,能分享下吗~!谢谢

代码都在啊 ,建索引,更新索引,删除索引,最后搜索的代码都有啊
1 楼 u_lie 2012-05-16  
大哥~! 搜索部分上面的的代码怎么写的啊,能分享下吗~!谢谢

相关推荐

    用lucene实现摘要的高亮点

    本篇文章主要探讨如何利用Lucene实现文件摘要的自动提取,并进行关键词高亮显示。这一过程涉及到Lucene的Highlighter组件,它专门用于突出显示搜索结果中的关键词。 首先,我们了解Lucene的Highlighter是如何工作的...

    lucene_web项目应用实例

    《Lucene Web项目应用实例详解》 在信息技术领域,搜索引擎技术是不可或缺的一部分,Apache Lucene作为一款开源全文搜索引擎库,为开发者提供了强大的文本检索能力。本文将深入探讨一个名为“lucene_web”的项目,...

    基于Lucene的全文检索引擎研究与应用.pdf

    ### 基于Lucene的全文检索引擎研究与应用 #### 概述 随着信息技术的飞速发展,尤其是互联网的普及,企业和个人积累了大量的电子文档。如何高效地管理和检索这些文档成为了亟待解决的问题。全文检索技术作为一种...

    全文检索引擎Lucene

    3. **集成到应用程序**: 开发者可以将Lucene库嵌入到Java应用中,实现自定义的全文检索功能。 4. **工具和库**: 如Luke工具,用于查看和分析Lucene索引;Tika用于解析各种格式的文件内容。 通过TestLucene文件,你...

    Lucene项目的jsp

    这个项目涉及到了在Java环境下使用JSP(JavaServer Pages)技术来构建基于Lucene的搜索应用。JSP是一种动态网页技术,允许开发者将Java代码嵌入到HTML页面中,从而在服务器端处理数据并生成动态内容。 **描述:...

    Lucene 概述视频详解

    在本视频教程中,我们将深入探讨Lucene的核心概念,以及如何利用它来构建自己的搜索应用。 **一、Lucene基本概念** 1. **索引**:在Lucene中,数据不是直接存储的,而是被转换为一种叫做索引的数据结构。索引是...

    Lucene全文搜索引擎的应用

    ### Lucene全文搜索引擎的应用 #### 摘要与背景 随着互联网技术的飞速发展,搜索引擎已成为人们获取信息的重要工具之一。它不仅提供了大量的信息,还简化了信息查找的过程。对于学术研究、日常学习和工作而言,...

    基于lucene的索引与搜索

    Lucene是一个开源的Java库,提供了强大的文本分析、索引和搜索功能,被广泛应用于各种信息检索系统中。 第一章 引言 在信息爆炸的时代,搜索引擎成为人们获取信息的重要工具。Apache Lucene作为一款强大的全文搜索...

    lucene全文搜索

    #### 四、构建Lucene应用程序 1. **开发环境搭建**: - 需要的JAR包: - `lucene-core-3.1.0.jar`:Lucene的核心组件。 - `lucene-analyzers-3.1.0.jar`:提供文本分析工具,如分词器。 - `lucene-highlighter-...

    Lucene.net搜索

    **Lucene.NET 搜索:深度解析与应用** **一、Lucene.NET 简介** Lucene.NET 是 Apache Software Foundation 开发的一个开源全文检索库,它是 Lucene 的 .NET 版本,为 .NET 平台提供了强大的文本搜索功能。Lucene...

    lucene的封装和性能优化

    Lucene是一个高性能、全文本搜索库,它为开发者提供了在应用程序中实现全文检索的功能。然而,为了更好地适应实际项目需求,通常需要对其进行封装,以便于管理和提升性能。本文将深入探讨Lucene的封装方法以及如何...

    lucene 站内搜索示例

    最后,将结果以用户友好的形式展示,如链接、摘要等。 在Java项目中,可以将这些步骤封装成服务类,提供接口供其他模块调用。示例代码可能会包括创建索引的 `createIndex()` 方法、查询的 `search(String query)` ...

    lucene检索新闻数据演示

    Lucene是一个高性能、可伸缩的信息检索库,它提供了一个简单但功能强大的API,可以用于在各种应用中实现全文搜索功能。 【描述】"利用lucene对下载的网络真实数据进行索引并检索索引资源"意味着我们需要执行以下...

    lucenelucenelucenelucene

    作为开源项目,Lucene 已经被广泛应用于各种 Web 应用、内容管理系统、搜索引擎等领域。 **主要组成部分** 1. **索引(Indexing)**:Lucene 的核心功能之一是将非结构化的文本数据转换成可搜索的索引。它将文档...

    lucene全文检索word2007

    Lucene全文检索Word2007示例项目提供了一个实用的方法,将复杂的文本搜索功能引入到Java应用中,尤其适用于处理大量的文档数据。通过结合使用Lucene和Apache POI,我们可以高效地索引和检索Word2007文档内容,为用户...

    Lucene.Net 实现全文检索

    在 .Net MVC4 中,Lucene.Net 可以作为独立的服务运行,或者集成到应用程序中。MVC(Model-View-Controller)是一种软件设计模式,用于组织 Web 应用程序的代码结构,使得代码更易于维护和扩展。在本案例中,我们将...

    lucene3.6.2及highlighter jar包

    Lucene是一个高度可定制的全文搜索引擎库,广泛应用于各种Java应用程序中,以实现强大的搜索功能。在3.6.2版本中,Lucene提供了一整套功能,包括索引构建、查询解析、文档检索以及优化等。而Highlighter组件,则是...

    基于Lucene的搜索引擎

    总的来说,基于Lucene的财经类搜索引擎是一个复杂而实用的系统,它将先进的信息检索技术应用于金融领域的信息检索,提升了数据的可获取性和分析效率。对于开发者来说,理解并掌握Lucene的原理和实践,对提升自身在...

    Lucene-2.3.1 源代码阅读学习

    Lucene是Apache软件基金会的一个开放源码项目,它是一个高性能、全文本搜索库,为开发者提供了在Java应用程序中实现全文检索功能的基础架构。本篇文章将深入探讨Lucene 2.3.1版本的源代码,帮助读者理解其内部工作...

    全文检索(Lucene)详解

    Lucene不仅用于网站搜索引擎,还广泛应用于企业级应用程序,帮助用户快速找到所需的信息。 1. **Lucene的基本概念** - **索引**: Lucene首先对文档内容建立索引,这个过程类似于书籍的目录,使得搜索能快速定位到...

Global site tag (gtag.js) - Google Analytics