`

Lucene3.3.0 烂笔头

 
阅读更多
项目中需要用到全文检索,不用说首选lucene.目前版本为3.3.0  lib中增加lucene-core-3.3.0.jar
分词器采用第三方的IKAnalyzer.版本为IKAnalyzer3.2.8.jar
由于项目并发量可能不会很大,所以在新建一个记录保存到数据时,同时对该记录进行硬盘增加索引处理。修改和删除一样.
另外.每天半夜索引重新生成一份,然后合并.

针对数据在做索引保存时,只保存id,以及需要检索的内容content.
1.新增:
	/***************************************************************************
	 * 新增
	 */
	private void add(LuceneIndexVO luceneIndexVO) throws Exception {
		// 创建doc对象
		Document doc = new Document();
		// 增加相关字段
		doc.add(new Field(LuceneUtil.KEY_ID, luceneIndexVO.getId() + "",Field.Store.YES, Field.Index.NOT_ANALYZED));
		doc.add(new Field(LuceneUtil.KEY_CONTENT, luceneIndexVO.getContent(),Field.Store.YES, Field.Index.ANALYZED));
		// 为该对象创建索引
		IndexWriter writer =null;
		try{
		writer=getWriter();
		writer.addDocument(doc);
		//writer.optimize();
		}catch(Exception e){e.printStackTrace();}finally{
			if(writer!=null){
				writer.close();
			}
		}
	}

2.修改:
	private void update(LuceneIndexVO luceneIndexVO) throws Exception {
		Document doc = new Document();
		// 设置文档的值
		doc.add(new Field(LuceneUtil.KEY_ID, luceneIndexVO.getId() + "",Field.Store.YES, Field.Index.NOT_ANALYZED));
		doc.add(new Field(LuceneUtil.KEY_CONTENT, luceneIndexVO.getContent(),Field.Store.YES, Field.Index.ANALYZED));
		// 创建关键字
		Term term = new Term(LuceneUtil.KEY_ID, luceneIndexVO.getId() + "");
		// 更新
		IndexWriter writer =null;
		try{
		writer=getWriter();
		// 跟进term 指定的id,更新
		writer.updateDocument(term, doc);
		writer.close();
	}catch(Exception e){e.printStackTrace();}finally{
		if(writer!=null){
			writer.close();
		}
	}
	}

3.删除:
	private void delete(LuceneIndexVO luceneIndexVO) throws Exception {
		// 根据id创建查询对象
		Term term = new Term(LuceneUtil.KEY_ID, luceneIndexVO.getId()+ "");
		// 删除索引
		IndexWriter writer =null;
		try{
		writer=getWriter();
		// 根据查询条件,删除Doc
		writer.deleteDocuments(term);
		writer.close();
		}catch(Exception e){e.printStackTrace();}finally{
			if(writer!=null){
				writer.close();
			}
		}
	}


同时后台对索引的增加修改删除都有一个线程来处理:
	/***
	 * 主要的业务处理
	 */
	private void doWork(){
		try {
			
			//do the main job
			LuceneIndexVO luceneIndexVO=getLuceneIndexVO();
			if(luceneIndexVO==null){
				try {
					Thread.sleep(LuceneUtil.SLEEP_TIME);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				return;//结束本次循环
			}
			//根据操作对象判断,进行相关操作
			if (luceneIndexVO.getOpt().equals(LuceneUtil.OBJ_OPT_ADD)) {
				//增加
				add(luceneIndexVO);
			} else if (luceneIndexVO.getOpt().equals(LuceneUtil.OBJ_OPT_UPDATE)) {
				//更新
				update(luceneIndexVO);
			} else if (luceneIndexVO.getOpt().equals(LuceneUtil.OBJ_OPT_DELETE)) {
				//删除
				delete(luceneIndexVO);
			}
			
		} catch (Exception e) {
			logger.error(getSubName()+"...main job occur error:"+e.getMessage()+",detail is:\n");
			e.printStackTrace();
			try {
				Thread.sleep(LuceneUtil.SLEEP_TIME);
			} catch (InterruptedException e1) {
			}
		}
	}


包含首次初始化
	public void run() {
		logger.info(getSubName()+" start to run!");
		long workFlag=System.currentTimeMillis();
		//1.如果目录和索引文件不存在则需要首次初始化.
		initIndex();
		//2.如果索引目录下有lock文件则必须删除.
		checkWorkDirectory();
		while(isRunning){
			//一分钟打印一次信息.
			long interval=System.currentTimeMillis()-workFlag;
			long flag=interval-LuceneUtil.ONE_MINUTE_INTERVAL;
			
			if(flag>=0){
				logger.info(getSubName()+"...working......");
				workFlag=System.currentTimeMillis();
			}
			doWork();
		}
		logger.info(getSubName()+" end to run!");
	}


相关调用图:
原Action增加一个lucene相关的service.在对新增,修改,删除的对象,完成操作时,把该对象放入队列,后台有lucene线程来同步更新硬盘索引.
  • 大小: 51.9 KB
分享到:
评论

相关推荐

    Lucene3.3.0学习Demo

    这个"Lucene3.3.0学习Demo"是针对这一版本进行的实践教学资源,旨在帮助开发者更好地理解和使用Lucene。 首先,我们来看看Lucene的基本工作流程: 1. **分词**:Lucene通过Analyzer处理输入的文本,将其分解为一...

    Lucene 3.3.0 API CHM 格式

    Lucene 3.3.0 API chm格式带全文索引方便携带和查询。 从之前发布其他chm文件下载用户的反映看,有不少朋友反映下载后打开无法显示,这一般不是chm文件的问题,这里统一说明一下解决办法: 如果文件打开看不到右边的...

    Java多级多类型全文检索 - 基于Lucene3.3.0

    在这个“Java多级多类型全文检索 - 基于Lucene3.3.0”的主题中,我们将深入探讨如何利用Lucene 3.3.0版本来实现复杂且高效的检索机制,支持多种文件类型和多层次的索引构建。 首先,Lucene是一个开源的全文检索框架...

    lucene-3.3.0-src.zip

    《Apache Lucene 3.3.0 源码解析》 Apache Lucene 是一个开源全文搜索引擎库,它为开发者提供了强大的文本搜索功能。这里我们关注的是它的3.3.0版本的源代码,文件名为“lucene-3.3.0-src.zip”。这个版本在2011年...

    lucene3.3的全部jar包

    lucene-analyzers-3.3.0.jar lucene-benchmark-3.3.0.jar lucene-core-3.3.0.jar lucene-demo-3.3.0.jar lucene-grouping-3.3.0.jar lucene-highlighter-3.3.0.jar lucene-icu-3.3.0.jar lucene-instantiated-3.3.0....

    lucene-core-3.3.0.jar

    lucene-core-3.3.0.jarlucene-core-3.3.0.jar

    lucene-3.3.0.zip

    lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。

    lucene-analyzers-3.3.0 jar包和源码

    《深入理解Lucene-Analyzers-3.3.0:jar包与源码解析》 在信息技术领域,搜索引擎是至关重要的工具,而Lucene作为开源全文检索库,为开发者提供了强大的搜索功能。本文将深入探讨Lucene-Analyzers-3.3.0版本,解析...

    lucene-memory-3.3.0.jar

    lucene-memory-3.3.0.jar 包下载

    lucene-highlighter-3.3.0.jar

    lucene-highlighter-3.3.0.jar 包下载

    lucene-analyzers-3.3.0.jar

    lucene-analyzers-3.3.0.jar包下载

    lucene,lucene教程,lucene讲解

    lucene,lucene教程,lucene讲解。 为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store....

    lucene3.3全部jar包

    - `lucene-core-3.3.0.jar`:Lucene 的核心库,包含了索引和搜索的基本功能。 - `lucene-analyzers-3.3.0.jar`:提供了多种语言的文本分析器,用于处理不同语言的文本。 - `lucene-backward-codecs-3.3.0.jar`:为了...

    lucene实例lucene实例

    《Lucene实战:深入解析与应用》 Lucene,作为Apache软件基金会的开源全文检索库,是Java领域中广泛使用的搜索引擎框架。它提供了强大的文本分析、索引和搜索功能,被许多大型项目采用,如Elasticsearch、Solr等。...

    lucene-4.7.0全套jar包

    【Lucene 4.7.0 全套JAR包详解】 Lucene是一个开源全文搜索引擎库,由Apache软件基金会开发并维护。它提供了一个高级、灵活的文本搜索API,允许开发者轻松地在应用程序中实现复杂的搜索功能。这次提供的“lucene-...

    Lucene时间区间搜索

    Lucene是一款强大的全文搜索引擎库,广泛应用于各种数据检索场景。在C#环境下,利用Lucene进行时间区间搜索是提高数据检索效率和精确度的重要手段。本篇将深入探讨如何在C#中实现Lucene的时间区间查询匹配,以及涉及...

    Lucene3.5源码jar包

    本压缩包包含的是Lucene 3.5.0版本的全部源码,对于想要深入理解Lucene工作原理、进行二次开发或者进行搜索引擎相关研究的开发者来说,是一份非常宝贵的学习资源。 Lucene 3.5.0是Lucene的一个重要版本,它在3.x...

    lucene3.0 lucene3.0

    lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0

    lucene-core-7.7.0-API文档-中文版.zip

    赠送jar包:lucene-core-7.7.0.jar; 赠送原API文档:lucene-core-7.7.0-javadoc.jar; 赠送源代码:lucene-core-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.7.0.pom; 包含翻译后的API文档:lucene...

    lucene in action英文版 lucene 3.30包

    《Lucene in Action》是关于Apache Lucene的权威指南,这本书深入浅出地介绍了全文搜索引擎的构建和优化。Lucene是一个高性能、全文本搜索库,它允许开发人员在应用程序中轻松实现复杂的搜索功能。这本书主要面向...

Global site tag (gtag.js) - Google Analytics