求教:一个关于lucene的全文检索问题!急
本人正用lucene1.4.3做一个关于数据库的全文索引,数据库中的内容基本上是按id,content字段来建立的,下面是我在网上找的一个关于建立某某论坛的全文检索,跟我做的东西差不多,但用eclipse做的是没有错误,但我查询的总返回0条记录!想问问到底是什么原因?如果说是中文分词很差,但我查询英文也还是一样!如果有好的用lucene实现全文检索和查询的方法,希望赐教!
建立索引的代码:
package org.apache.lucene.analysis.search;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.apache.lucene.index.*;
public class indexmysql
{
public indexmysql()
{
}
public static void main(String[] args)
{
try
{
org.apache.lucene.index.IndexWriter writer0 = new org.apache.lucene.index.IndexWriter
("index",new org.apache.lucene.analysis.cn.ChineseAnalyzer(),false);
indexDocs(writer0);
writer0.optimize();
writer0.close();
}
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=f:\\DelphiBBSDataAll.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 aabb ");
while (rs.next())
{
writer.addDocument(mysqldocument.Document(rs.getString("ID"), rs.getString("CONTENT")));
}
rs.close();
stmt.close();
conn.close();
}
catch (Exception ex)
{
System.out.println("数据库操作有问题");
System.out.println(ex.getMessage());
ex.printStackTrace();
}
System.out.println("索引创建完毕");
searchmysql x=new searchmysql();
x.SearchText("数据库");//我的查询语句
}
上面用到的mysqldocument
package org.apache.lucene.analysis.search;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
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()
{
}
}
查询的方法实现:
package org.apache.lucene.analysis.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 void SearchText(String s)
{
try
{
Searcher searcher = new IndexSearcher("index");
ChineseAnalyzer analyzer = new ChineseAnalyzer();
Query query = QueryParser.parse(s, "content", analyzer);
///上面的“s”即是需要查询的关键字
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());
}
}
}
问题点数:0、回复次数:0Top




