请教一个使用lucene做全文检索与数据库连接时的问题

birdboyqss 2004-07-31 04:26:44
lucene给的demo是针对文件夹的。那么在jsp环境下,使用lucene检索整个网站的信息,请
问如何与数据库交互(就是怎样看待数据库里的数据),最好给一个实例或者过程。^-^

下载了jive的源码,感觉好复杂。:)
...全文
244 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
birdboyqss 2004-08-11
  • 打赏
  • 举报
回复
hehe ,我也看过了上面的代码就是不大清楚具体的实质,难道应该将建立索引的代码放到jsp中还是建一个cmd或sh,定时自动添加索引阿?
pigo 2004-08-01
  • 打赏
  • 举报
回复

建立索引的java代码:

package com.delphibbs.search;

import java.sql.*;
import org.apache.lucene.index.*;
import org.apache.lucene.document.*;

public class indexmysql {
public indexmysql() {
}

public static void main(String[] args) {
try {
long start = System.currentTimeMillis();

org.apache.lucene.index.IndexWriter writer = new org.apache.lucene.index.
IndexWriter("index",
// new org.apache.lucene.analysis.cjk.CJKAnalyzer(), true);
new org.apache.lucene.analysis.cn.ChineseAnalyzer(), true);
indexDocs(writer);
writer.optimize();
writer.close();
System.out.print(System.currentTimeMillis() - start);
System.out.println(" total milliseconds");

}
catch (Exception e) {
System.out.println(" 出错了 " + e.getClass() +
"\n 错误信息为: " + e.getMessage());
}
}

public static void indexDocs(IndexWriter writer) throws Exception {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=I:\\delphibbs\\DelphiBBS20030801-1031.mdb";
Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery(
"select ID,CONTENT from letters where ID<2077061");
//最初我是select all,上了次厕所回来之后,程序都还没有执行能够完,只好强行终止了。
////后来我只取了2000条记录出来,不过也还是花了两分多钟才把索引建立好。
while (rs.next()) {

writer.addDocument(com.delphibbs.search.mysqldocument.Document(
rs.getString("ID"), rs.getString("CONTENT")));
///只对id和帖子内容进行了建立索引
}
rs.close();
stmt.close();
conn.close();
}
catch (Exception ex) {
System.out.println("数据库操作有问题");
System.out.println(ex.getMessage());
ex.printStackTrace();
}
System.out.println("索引创建完毕");
}

}

/////////上面用到的mysqldocument.java

package com.delphibbs.search;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.DateField;

public class mysqldocument {
public static Document Document(String id,String content){
Document doc = new Document();
doc.add(Field.Keyword("ID", id));
doc.add(Field.Text("CONTENT", content));
return doc;
}
public mysqldocument() {
}
}


查询帖子的java文件:searchmysql.java

package com.delphibbs.search;

import org.apache.lucene.document.Document;
import org.apache.lucene.search.Searcher;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Hits;
import org.apache.lucene.analysis.cn.ChineseAnalyzer;
import org.apache.lucene.queryParser.QueryParser;

public class searchmysql {
public searchmysql() {
}

public static void main(String[] args) {
try {
Searcher searcher = new IndexSearcher("index");
ChineseAnalyzer analyzer = new ChineseAnalyzer();
//org.apache.lucene.analysis.cjk.CJKAnalyzer analyzer=new org.apache.lucene.analysis.cjk.CJKAnalyzer();
Query query = QueryParser.parse("游戏网站", "content", analyzer);
///上面的“游戏网站”即是需要查询的关键字
System.out.println("正在查找: " + query.toString("content"));
Hits hits = searcher.search(query);
System.out.println(hits.length() + " total matching documents");
java.text.NumberFormat format = java.text.NumberFormat.getNumberInstance();
for (int i = 0; i < hits.length(); i++) {
//开始输出查询结果
Document doc = hits.doc(i);
System.out.println(doc.get("ID"));
System.out.println("准确度为:" + format.format(hits.score(i) * 100.0) + "%");
System.out.println(doc.get("CONTENT"));
}
}
catch (Exception e) {
System.out.println(" 出错了 " + e.getClass() +
"\n 错误信息为: " + e.getMessage());
}

}

}




朋友别哭 2004-07-31
  • 打赏
  • 举报
回复
up

67,543

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧