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

lucene中给数据库做索引

    博客分类:
  • java
阅读更多

       好久没有写博客了,今天写一点,其实也不想写,最近在整搜索引擎相关的东西,要对数据库建立索引,lucene可以很方便的对文本文件,包括pdf等文件做索引,当然数据库也可以哇。

       废话不说,贴代码吧:

import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.RAMDirectory;
import org.wltea.analyzer.lucene.IKAnalyzer;

import com.patent.common.connectionManage.ConnectionManage;
import com.patent.common.connectionManage.ResultManage;

/**
 * @desc 专利数据索引管理类
 * @author 陈建国
 *
 */
public class IndexManage {
	private Directory ramdDirectory = null; //内存索引目录
	private Directory fsdDirectory = null;//文件索引目录
	private IndexWriter iwriter_ram = null; //
	private IndexWriter iwriter_fsd = null; //
	private ResultSet Result = null;//
	private ConnectionManage connManage = null;
	private int currectPage = 0 ;
	/**
	 * @desc 初始化lucene索引。
	 */
	public IndexManage(){
	
		try {
			fsdDirectory = FSDirectory.getDirectory("E:/temp/index/");
			iwriter_fsd = new IndexWriter(fsdDirectory,new IKAnalyzer(),true,IndexWriter.MaxFieldLength.LIMITED);
			connManage = new ConnectionManage();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 获取结果集
	 * @return
	 */
	public void getResult(int currectPage){
		ramdDirectory = new RAMDirectory();
		try {
			iwriter_ram = new IndexWriter(ramdDirectory,new IKAnalyzer(),true,IndexWriter.MaxFieldLength.LIMITED);
			
			ResultManage rsManage = new ResultManage(connManage.getConnection(),currectPage);
			Result = rsManage.getResultSet();	
			int k = 0;
			while(Result.next()){
				//System.out.println(currectPage+" "+k++);
				//添加document
				Document doc = new Document();
				doc.add(new Field("PatentNo",Result.getString("PatentNo"),Field.Store.YES,Field.Index.ANALYZED));
				doc.add(new Field("PublicationDate",Result.getString("PublicationDate"),Field.Store.YES,Field.Index.ANALYZED));
				doc.add(new Field("Title",Result.getString("Title"),Field.Store.YES,Field.Index.ANALYZED));
				doc.add(new Field("Inventors",Result.getString("Inventors"),Field.Store.YES,Field.Index.ANALYZED));
				doc.add(new Field("ANA",Result.getString("ANA"),Field.Store.YES,Field.Index.ANALYZED));
				doc.add(new Field("SerialNo",Result.getString("SerialNo")+Result.getString("SeriesCode"),Field.Store.YES,Field.Index.ANALYZED));
				doc.add(new Field("Filed",Result.getString("Filed"),Field.Store.YES,Field.Index.ANALYZED));
				doc.add(new Field("USCurrentClass",Result.getString("USCurrentClass"),Field.Store.YES,Field.Index.ANALYZED));
				doc.add(new Field("InternlClass",Result.getString("InternlClass"),Field.Store.YES,Field.Index.ANALYZED));
				doc.add(new Field("Abstract",Result.getString("Abstract"),Field.Store.YES,Field.Index.ANALYZED));
				
				iwriter_ram.addDocument(doc);
				
			}
			
			iwriter_ram.commit();
			iwriter_fsd.addIndexes(new Directory[]{ramdDirectory});
			
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (LockObtainFailedException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	
	/**
	 * 关闭indexWriter
	 */
	public void close(){
		if(iwriter_fsd != null){
			try {
				iwriter_fsd.commit();
				iwriter_fsd.close();
			} catch (CorruptIndexException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
			
		}
	}
	
}

其实么,说白了就是将数据库中的数据取出来然后构建document。不过今天遇到一个大问题了,取那些百万级别的数据到底怎么办,感觉速度好慢啊。

分享到:
评论

相关推荐

    用Lucene.net对数据库建立索引及搜索

    《使用Lucene.NET对数据库建立索引及搜索》 在信息技术领域,搜索引擎是不可或缺的一部分,尤其是在处理大量数据时。Lucene.NET是一个强大的全文搜索引擎库,它允许开发人员在应用程序中集成高级搜索功能。本文将...

    用lucene对数据库建立索引及搜索

    - 遍历数据库记录,对每个字段(如`title`和`content`)使用`Document`对象添加字段,并调用`AddDocument`方法将文档添加到索引中。 - 最后,调用`IndexWriter`的`Commit`方法保存索引。 3. **全文搜索**: - ...

    用Lucene.net对数据库建立索引及搜索.doc.doc

    用Lucene.net对数据库建立索引及搜索

    Lucene与关系型数据库对比

    数据库索引通常是为了加速查询操作,减少对整个表的扫描时间。然而,这种索引机制在处理大规模数据集时仍存在局限性。而Lucene的索引机制则更加灵活和高效,它基于项的静态存储,能够实现基于项的高效搜索,从而大幅...

    lucene与sqlserver数据库实现索引的简单实例

    3. **创建索引**:使用Lucene的`IndexWriter`类,将预处理后的数据转换为Lucene的文档(Document)对象,并添加到索引中。每个文档可以包含多个字段(Field),每个字段对应数据库中的一个列,如标题、内容等。 4. ...

    基于Lucene的Oracle数据库全文检索.pdf

    通过使用Lucene,可以对Oracle数据库中的数据建立索引,并提供快速的全文检索功能。 Lucene的优点在于其跨平台和简单易用等特点,已经吸引了众多的用户群体。 Lucene的架构提供了完整的查询引擎和索引引擎,部分...

    利用Lucene.NET建立SQL数据库记录索引文件程序C#源代码(包含数据库结构)

    对初学使用dotlucent作站...利用dotlucene为网站做的索引文件的应用程序。 数据库源是SQL Server,项目是用VS.NET2008开发的。 应用程序界面可以配置数据库链接,生成报告,定时执行增量索引,对单条索引进行更新操作。

    lucene对数据库操作

    间接方法则是在应用程序中读取数据库,构建Lucene文档,并将这些文档添加到索引中。 1. **数据提取与预处理**:在将数据库内容导入Lucene之前,需要先进行数据提取。这可能涉及SQL查询来获取所需字段,然后进行...

    LUCENE索引搜索数据库技术汇总

    - **合并段(Merge Segments)**: `IndexWriter`会在索引中创建多个段,定期合并小段可以提高搜索效率。 - **缓存(Cache)**: 使用`BitSet`缓存和`FilterCache`可以加快查询速度,特别是对于经常查询的过滤条件。...

    关于lucene建立数据库索引的更新说明

    在本文中,我们将探讨如何使用Lucene建立数据库索引,并分享一些在实践过程中的经验和教训。Lucene是一个高性能、全文本搜索库,广泛用于构建搜索引擎。在创建索引时,需要注意以下关键点: 1. **资料的准确性**:...

    lucene与数据库连接进行查询

    在这个场景中,`lucenetestsql` 文件很可能包含了实现上述过程的示例代码,包括数据库连接、SQL 查询、Lucene 索引创建和查询等关键部分。通过分析这个代码,你可以学习如何在实际项目中结合 Lucene 和数据库。 ...

    lucene 全文检索数据库

    这涉及到对`Photo`对象的遍历,提取其文本内容(如标题、描述等),并使用`IndexWriter`类将这些内容写入Lucene索引中。 #### Lucene搜索实现 完成索引创建后,即可使用Lucene的搜索功能。这通常包括构建查询解析...

    使用lucene全文检索数据库

    `IndexerFile.java`是索引器类,负责读取Access数据库中的数据并构建Lucene索引。它可能包含以下步骤: 1. 连接Access数据库:使用JDBC驱动连接到`tangshi.mdb`数据库文件。 2. 查询数据:从数据库中获取待索引的...

    Lucene5学习之增量索引(Zoie)

    在本例中,提供的"person.sql"文件可能是用于初始化或更新数据库的数据脚本,这与Zoie的增量索引原理密切相关。在实际应用中,每当有新的person数据插入或更新时,Zoie会监控到这些变化,然后对这些数据进行增量索引...

    基于lucene技术的增量索引

    Lucene通过分析这些文本,将其拆分为术语,并在倒排索引中存储每个术语的位置信息,以便快速定位到包含特定术语的文档。 **2. 增量索引的概念** 增量索引的目的是避免重新构建整个索引,尤其是在大型数据集上,这...

    lucene 数据库

    文档中探讨了如何将数据库中的数据导入Lucene索引,以及如何在查询时结合数据库进行高效的数据检索。这对于那些需要处理大量结构化数据的应用来说,是非常关键的知识点。 接下来是两本电子书,《Lucene in Action....

    Lucene建索引及查询关键字

    在Eclipse环境中运用java,Lucene建索引及查询关键字

Global site tag (gtag.js) - Google Analytics