好久没有写博客了,今天写一点,其实也不想写,最近在整搜索引擎相关的东西,要对数据库建立索引,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是一个强大的全文搜索引擎库,它允许开发人员在应用程序中集成高级搜索功能。本文将...
- 遍历数据库记录,对每个字段(如`title`和`content`)使用`Document`对象添加字段,并调用`AddDocument`方法将文档添加到索引中。 - 最后,调用`IndexWriter`的`Commit`方法保存索引。 3. **全文搜索**: - ...
用Lucene.net对数据库建立索引及搜索
数据库索引通常是为了加速查询操作,减少对整个表的扫描时间。然而,这种索引机制在处理大规模数据集时仍存在局限性。而Lucene的索引机制则更加灵活和高效,它基于项的静态存储,能够实现基于项的高效搜索,从而大幅...
3. **创建索引**:使用Lucene的`IndexWriter`类,将预处理后的数据转换为Lucene的文档(Document)对象,并添加到索引中。每个文档可以包含多个字段(Field),每个字段对应数据库中的一个列,如标题、内容等。 4. ...
通过使用Lucene,可以对Oracle数据库中的数据建立索引,并提供快速的全文检索功能。 Lucene的优点在于其跨平台和简单易用等特点,已经吸引了众多的用户群体。 Lucene的架构提供了完整的查询引擎和索引引擎,部分...
对初学使用dotlucent作站...利用dotlucene为网站做的索引文件的应用程序。 数据库源是SQL Server,项目是用VS.NET2008开发的。 应用程序界面可以配置数据库链接,生成报告,定时执行增量索引,对单条索引进行更新操作。
间接方法则是在应用程序中读取数据库,构建Lucene文档,并将这些文档添加到索引中。 1. **数据提取与预处理**:在将数据库内容导入Lucene之前,需要先进行数据提取。这可能涉及SQL查询来获取所需字段,然后进行...
- **合并段(Merge Segments)**: `IndexWriter`会在索引中创建多个段,定期合并小段可以提高搜索效率。 - **缓存(Cache)**: 使用`BitSet`缓存和`FilterCache`可以加快查询速度,特别是对于经常查询的过滤条件。...
在本文中,我们将探讨如何使用Lucene建立数据库索引,并分享一些在实践过程中的经验和教训。Lucene是一个高性能、全文本搜索库,广泛用于构建搜索引擎。在创建索引时,需要注意以下关键点: 1. **资料的准确性**:...
在这个场景中,`lucenetestsql` 文件很可能包含了实现上述过程的示例代码,包括数据库连接、SQL 查询、Lucene 索引创建和查询等关键部分。通过分析这个代码,你可以学习如何在实际项目中结合 Lucene 和数据库。 ...
这涉及到对`Photo`对象的遍历,提取其文本内容(如标题、描述等),并使用`IndexWriter`类将这些内容写入Lucene索引中。 #### Lucene搜索实现 完成索引创建后,即可使用Lucene的搜索功能。这通常包括构建查询解析...
`IndexerFile.java`是索引器类,负责读取Access数据库中的数据并构建Lucene索引。它可能包含以下步骤: 1. 连接Access数据库:使用JDBC驱动连接到`tangshi.mdb`数据库文件。 2. 查询数据:从数据库中获取待索引的...
在本例中,提供的"person.sql"文件可能是用于初始化或更新数据库的数据脚本,这与Zoie的增量索引原理密切相关。在实际应用中,每当有新的person数据插入或更新时,Zoie会监控到这些变化,然后对这些数据进行增量索引...
Lucene通过分析这些文本,将其拆分为术语,并在倒排索引中存储每个术语的位置信息,以便快速定位到包含特定术语的文档。 **2. 增量索引的概念** 增量索引的目的是避免重新构建整个索引,尤其是在大型数据集上,这...
文档中探讨了如何将数据库中的数据导入Lucene索引,以及如何在查询时结合数据库进行高效的数据检索。这对于那些需要处理大量结构化数据的应用来说,是非常关键的知识点。 接下来是两本电子书,《Lucene in Action....
在Eclipse环境中运用java,Lucene建索引及查询关键字