package com.chedong.weblucene.index;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Date;
import org.apache.lucene.queryParser.ParseException;
import com.chedong.weblucene.beans.UserInfo;
public class TestIndex {
public final static String indexDir = "C:\\user\\index";
private static Connection getConnection() {
Connection conn = null;
String url = "jdbc:mysql://127.0.0.1:3306/bookmarks";
String userName = "root";
String password = "xiduo";
try {
Class.forName("com.mysql.jdbc.Driver");
conn = java.sql.DriverManager
.getConnection(url, userName, password);
} catch (Exception e) {
e.printStackTrace();
System.out.println("Error Trace in getConnection() : "
+ e.getMessage());
}
return conn;
}
public static void main(String[] args) throws
IOException, ParseException, SQLException {
index();
}
public static void index() throws SQLException {
Connection conn = null;
try {
conn = getConnection();
UserInfo[] list = UserInfo.loadPhotos(conn);
IndexerFile.indexFile(indexDir, list);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
conn.close();
}
}
}
}
####################################################
package com.chedong.weblucene.beans;
import java.sql.PreparedStatement;
import java.util.Vector;
import java.sql.ResultSet;
import java.sql.Connection;
import java.sql.SQLException;
public class UserInfo {
private long idUserInfo;
private String nickName;
public UserInfo() {
}
public long getIdUserInfo() {
return idUserInfo;
}
public void setIdUserInfo(long idUserInfo) {
this.idUserInfo = idUserInfo;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public static UserInfo[] loadPhotos(Connection con) throws Exception {
Vector list = new Vector();
PreparedStatement pstm = null;
ResultSet rs = null;
String sql = "select IdUserInfo, NickName from user_info";
try {
pstm = con.prepareStatement(sql);
rs = pstm.executeQuery();
while (rs.next()) {
UserInfo userinfo = new UserInfo();
userinfo.setIdUserInfo(rs.getLong(1));
userinfo.setNickName(rs.getString(2));
list.add(userinfo);
}
} catch (SQLException e) {
e.printStackTrace();
throw new Exception(" loadUserInfoByDate has error");
} finally {
if (rs != null) {
rs.close();
}
if (pstm != null) {
pstm.close();
}
}
return (UserInfo[]) list.toArray(new UserInfo[list.size()]);
}
}
#############################################
package com.chedong.weblucene.index;
import org.apache.lucene.index.IndexWriter;
import java.io.IOException;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import java.io.File;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import com.chedong.weblucene.beans.UserInfo;
import java.util.Date;
public class IndexerFile {
//使用方法:IndexFiles[索引输出目录][索引的文件列表]
public static int indexFile(String indexDir, UserInfo[] list) throws
IOException {
long startTime = new Date().getTime();
File segments = new File(indexDir + File.separator + "segments");
boolean bCreate = !segments.exists();
bCreate = true;
//用指定的语言分析器构造一个新的写索引器(第三个参数表示是否为追加索引);
CJKAnalyzer analyzer = new CJKAnalyzer();
IndexWriter writer = new IndexWriter(indexDir, analyzer, bCreate);
String strNickName="";
for (int i = 0; i < list.length; i++) {
Document doc = new Document();
doc.add(Field.UnIndexed("IdUserInfo",
String.valueOf(list[i].getIdUserInfo())));
System.out.println("getIdUserInfo=" + i + "=" +
list[i].getIdUserInfo());
strNickName=list[i].getNickName();
if(strNickName==null){
strNickName="游客" + list[i].getIdUserInfo();
}
doc.add(Field.Text("NickName", strNickName));
System.out.println("getAddress=" + i + "=" + strNickName);
writer.addDocument(doc); //经文档写入索引
}
long endTime = new Date().getTime();
System.out .println("建立索引时间" + (endTime - startTime));
int numIndexed = writer.docCount();
writer.optimize();
//关闭写索引器
writer.close();
return numIndexed;
}
}
分享到:
相关推荐
《使用Lucene.NET对数据库建立索引及搜索》 在信息技术领域,搜索引擎是不可或缺的一部分,尤其是在处理大量数据时。Lucene.NET是一个强大的全文搜索引擎库,它允许开发人员在应用程序中集成高级搜索功能。本文将...
本文将深入探讨如何利用Lucene实现增量索引,这是一种在数据库或文件系统更新时仅对新数据或变化数据进行索引的技术,以降低资源消耗并保持搜索性能。 **1. Lucene基础知识** Lucene首先需要理解的是它的核心概念,...
**使用Lucene对数据库建立索引及搜索** Lucene是一个高性能、可伸缩的信息检索库,它是Apache软件基金会的顶级项目之一。它提供了一个简单但功能强大的API,用于在各种数据源上创建全文搜索引擎,包括数据库。在本...
然而,Lucene可以与数据库结合使用,以实现高效的全文搜索和索引。在这个主题中,我们将深入探讨如何利用Lucene对数据库中的数据进行索引和查询。 首先,我们需要理解Lucene的工作原理。Lucene通过分析文本,将其...
使用 Delta-importer,我们可以将新添加或更新的数据从 Oracle 数据库中提取出来,然后将其插入 Solr 索引库中。 索引配置文件 在 Solr 中,我们需要配置索引库的配置文件,以便 Solr 能够正确地索引数据。配置...
【知识点详解】 1. **Lucene简介** Lucene是一个高性能、全文本搜索库,由Apache...总之,使用Lucene对数据库进行索引可以显著提升全文搜索的效率,但需要注意索引维护和性能优化,以确保系统的稳定性和响应速度。
2. 查询数据:从数据库中获取待索引的记录。 3. 创建文档:将每条记录转化为Lucene的Document对象,每个字段对应记录的一个属性。 4. 建立索引:使用`IndexWriter`将文档写入索引,可以设置分词器和分析器来定制索引...
- **索引(Index)**:索引是Lucene对文档进行处理后生成的数据结构,用于快速查找满足特定查询条件的文档。 - **分词(Tokenization)**:将文档内容分割成独立的词语,称为“术语”或“Token”。 - **分析器...
- **创建索引**: 首先,读取数据源(如数据库、文件系统等)中的文档,然后创建`Document`对象,添加字段和值。接着,使用`IndexWriter`将文档写入索引。 - **更新索引**: 当文档内容改变时,可以通过删除旧索引并...
首先,我们要知道Lucene的索引并非数据库中的那种可以立即定位数据的索引,而是用于快速查找文档中包含特定单词的索引。这个过程分为以下几个关键步骤: 1. **分词(Tokenization)**:Lucene使用Analyzer进行文本...
2. 创建索引目录:索引数据会存储在一个Directory对象中,可以是文件系统、内存或数据库。通常我们选择FSDirectory,将索引存储在本地文件系统。 3. 创建文档对象:为每份要索引的数据创建一个Document对象,添加...
3. **创建索引**:使用Lucene的`IndexWriter`类,将预处理后的数据转换为Lucene的文档(Document)对象,并添加到索引中。每个文档可以包含多个字段(Field),每个字段对应数据库中的一个列,如标题、内容等。 4. ...
在这个场景中,我们讨论的是如何结合Lucene和MySQL来实现一个Java应用程序,该程序能够从MySQL数据库中提取数据,创建索引,并进行高效的搜索。 首先,我们需要理解Lucene的工作原理。Lucene通过分析文本,将文档...
4. **循环写入索引**:对于每个文件,创建`Document`对象并添加`Field`,然后使用`IndexWriter`写入索引。 5. **关闭IndexWriter**:完成索引创建后关闭写入器。 #### 五、总结 Lucene3是一个功能强大的搜索引擎库...
1. **数据获取**:首先,你需要从SQL数据库中获取需要建立索引的数据。这可能涉及到执行SQL查询,然后将查询结果转换为Lucene.NET支持的文档格式。 2. **文档创建**:Lucene.NET中的文档对象用于存储待索引的信息。...