如果要构建一个全文检索系统,并且文章全部保存在数据库中,那下面的例子会有很大的帮助.
package gzu.lyq.db;
import java.sql.*;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
//Lucene为数据库建索引实例
public class LuceneDB {
Connection conn = null;
//操作 Oracle 数据库
private final String URL = "jdbc:oracle:thin:@localhost:1521:ORCL";
public LuceneDB(){
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//Oracle连接用户名:scott 密码:tiger
conn = DriverManager.getConnection(URL,"scott","tiger");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public Connection getConnection(){
return this.conn;
}//获取数据库连接
public void close(){
try {
this.conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}//关闭数据库连接
public static void main(String args[]) throws Exception {
LuceneDB lucene = new LuceneDB();
IndexWriter writer = null;
Connection conn = lucene.getConnection();
String sql = "SELECT * FROM student";
writer = new IndexWriter("D:\\index",new StandardAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()){
Document doc = new Document();
//为字段 sname 建索引
doc.add(new Field("sname",rs.getString("sname"),Field.Store.YES,Field.Index.ANALYZED));
writer.addDocument(doc);
}
rs.close(); //关闭记录集
conn.close(); //关闭数据库连接
writer.optimize(); //索引优化
writer.close(); //关闭读写器
Directory dir = FSDirectory.getDirectory("D:\\index");
IndexSearcher searcher = new IndexSearcher(dir);
//选择姓名中包含张字的记录
QueryParser parser = new QueryParser("sname", new StandardAnalyzer());
Query query = parser.parse("张");
TopDocs topDocs = searcher.search(query, 100);
ScoreDoc[] hits = topDocs.scoreDocs;
for(int i=0;i< hits.length;i++){
int DocId = hits.doc;
Document doc = searcher.doc(DocId);
System.out.println(doc.get("sname")); //张立
}
}
}
其中,Student表的内容如下:
SNO SNAME SS SAGE SDEPT
----- ---------- -- ---------- ----------
95001 李勇 男 20 CS
95002 刘晨 女 19 IS
95003 王敏 女 18 MA
95004 张立 男 19 IS
分享到:
相关推荐
**使用Lucene对数据库建立索引及搜索** Lucene是一个高性能、可伸缩的信息检索库,它是Apache软件基金会的顶级项目之一。它提供了一个简单但功能强大的API,用于在各种数据源上创建全文搜索引擎,包括数据库。在本...
《使用Lucene.NET对数据库建立索引及搜索》 在信息技术领域,搜索引擎是不可或缺的一部分,尤其是在处理大量数据时。Lucene.NET是一个强大的全文搜索引擎库,它允许开发人员在应用程序中集成高级搜索功能。本文将...
然而,Lucene可以与数据库结合使用,以实现高效的全文搜索和索引。在这个主题中,我们将深入探讨如何利用Lucene对数据库中的数据进行索引和查询。 首先,我们需要理解Lucene的工作原理。Lucene通过分析文本,将其...
在本文中,我们将探讨如何使用Lucene建立数据库索引,并分享一些在实践过程中的经验和教训。Lucene是一个高性能、全文本搜索库,广泛用于构建搜索引擎。在创建索引时,需要注意以下关键点: 1. **资料的准确性**:...
在Eclipse环境中运用java,Lucene建索引及查询关键字
数据库索引通常是为了加速查询操作,减少对整个表的扫描时间。然而,这种索引机制在处理大规模数据集时仍存在局限性。而Lucene的索引机制则更加灵活和高效,它基于项的静态存储,能够实现基于项的高效搜索,从而大幅...
2. **文档对象创建**:为每个数据库记录创建一个 Lucene 的 `Document` 对象,将字段映射到文档的字段中,例如,数据库中的“标题”对应 Lucene 文档的“title”字段。 3. **索引构建**:使用 `IndexWriter` 将 `...
本文将深入探讨如何利用Lucene实现增量索引,这是一种在数据库或文件系统更新时仅对新数据或变化数据进行索引的技术,以降低资源消耗并保持搜索性能。 **1. Lucene基础知识** Lucene首先需要理解的是它的核心概念,...
Lucene是一种全文搜索的辅助工具,可以对数据库进行全文搜索,为我们带来了极大的便利和比较高的效率。本文主要是利用Lucene对MS Sql Server 2000进行建立索引,然后进行全文索引。下面将详细介绍如何使用Lucene对...
- Lucene首先将非结构化的文本数据(如文件或数据库内容)进行分析,将其拆分为独立的词语(称为“术语”或“token”)。 - 分析器(Analyzer)负责这个过程,可以定制以适应不同的语言和内容格式。 - 术语被存储...
用Lucene.net对数据库建立索引及搜索
本实例将探讨如何结合Lucene和SQL Server数据库来实现高效的索引和搜索功能。 Lucene是一个由Apache软件基金会开发的全文检索库,它提供了一个高级的、可扩展的、基于Java的搜索程序库。Lucene的核心功能包括文档的...
- 在图书馆管理系统中,可以为Authors表建立Lucene索引,加速作者信息的搜索。 - 在Web界面中,用户输入查询条件,后台使用Lucene进行快速匹配,然后显示搜索结果。 7. **数据库字段解析** - Au_id:作者编号,...
对初学使用dotlucent作站...利用dotlucene为网站做的索引文件的应用程序。 数据库源是SQL Server,项目是用VS.NET2008开发的。 应用程序界面可以配置数据库链接,生成报告,定时执行增量索引,对单条索引进行更新操作。
文档中探讨了如何将数据库中的数据导入Lucene索引,以及如何在查询时结合数据库进行高效的数据检索。这对于那些需要处理大量结构化数据的应用来说,是非常关键的知识点。 接下来是两本电子书,《Lucene in Action....