好久没有写博客了,今天写一点,其实也不想写,最近在整搜索引擎相关的东西,要对数据库建立索引,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对数据库建立索引及搜索.doc
用Lucene.net对数据库建立索引及搜索
关于Lucene对数据操作,详细信息请见文档
lucene与sqlserver数据库实现索引的简单实例lucene与sqlserver数据库实现索引的简单实例
这是一个结合Lucene 对数据库索引的一个真正的实例。它反应了Lucene 的基础原理
Lucene_索引数据库.doc
lucene建立数据库索引的问题,在这里,把其中的一些问题补充说明,希望对大家有新的帮助,希望大家相互提出问题,相互学习,共同进步!!
lucene3针对数据库索引操作,示例源码+解读。
关于lucene对数据库建立索引和进行查询。这方面的东西太少了。大家应该多上传一些资料。
在Eclipse环境中运用java,Lucene建索引及查询关键字
这是我学LUCENE索引数据库表并且搜索相关字段的时期整理出来的几个不错的资料,我觉得里面总有一款会适合你,而且你所需要知道的技术里面基本上都是涵盖的,所以可以当作教材或者参考手册使用。
对初学使用dotlucent作站...利用dotlucene为网站做的索引文件的应用程序。 数据库源是SQL Server,项目是用VS.NET2008开发的。 应用程序界面可以配置数据库链接,生成报告,定时执行增量索引,对单条索引进行更新操作。
其次,利用内存索引和多线程并行处理技术提高Lucene创建倒排索引效率,并依据地名类别和显示优先级属性优化了检索结果相关度排序策略。最后,开发了一套具有快速搜索和地图定位展示的Web地名检索系统,使用500万条...
Lucene(这里用到的是Lucene.net版本也成为DotLucene)是一个...本源码演示了Lucene结合Sql建立索引,把Sql中的数据通过建立索引用Lucene来检索 支持简单的中文分词,同时提供了Lucene.Net-2.0-004版本的源码给大家
Lucene3总体图_建索引_查询_数据库索引[参考].pdf
为了快速查询,加快查询速度,减少与数据库交互,经常需要用到lucene实现创建索引和查询
测试StandardTokenizer的分词情况如下 测试CJKTokenizer的分词情况如下 测试ChinessTokenizer的分词情况如下 测试LowerCaseTokenizer的分词情况如下 测试WhitespaceTokenizer的分词情况如下
这是用Lucene.NET结合Sql建立全文检索Demo的源码,适合初学者学习Lucene,其中包含所需的DLL文件。
本文主要是利用Lucene对MS Sql Server 2000进行建立索引,然后进行全文索引。至于数据库的内容,可以是网页的内容,还是其它的。本文中数据库的内容是图书馆管理系统中的某个作者表- Authors表。
第一章 Lucene是个倒排索引 第二章 Lucene与数据库 第三章 Lucene的索引建立及文件结构 第四章 Lucene的检索机制及文档得分 第五章 Lucene的存储优化 第六章 Lucene的效率优化 第七章 用Lucene加快web开发!