您的位置:首页 > 数据库

lucene检索数据库并查询

2008-12-11 10:05 218 查看
下面的程序用的是:lucene- 2.0.0 数据库是:mysql

实现功能:为数据库建立索引,输入一个查询,就可以得到相应内容,有点类似SQL语句,此程序只供练习用。

数据库字段有:id name age 当输入一个人的姓名后,可以得到相应的其id和age

源代码如下:

package test;

import java.awt.List;

import java.io.BufferedInputStream;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.Reader;

import java.io.StringReader;

import java.sql.*;

import org.apache.lucene.search.Hits;

import org.apache.lucene.search.Query;

import org.apache.lucene.analysis.TokenStream;

import org.apache.lucene.analysis.standard.StandardAnalyzer;

import org.apache.lucene.document.*;

import org.apache.lucene.index.IndexReader;

import org.apache.lucene.index.IndexWriter;

import org.apache.lucene.index.TermPositionVector;

import org.apache.lucene.queryParser.QueryParser;

import org.apache.lucene.search.IndexSearcher;

import org.apache.lucene.store.Directory;

import org.apache.lucene.store.FSDirectory;

import org.apache.lucene.store.RAMDirectory;

import jeasy.analysis.MMAnalyzer;

public class TestLucene {

private static ResultSet recrd;

static MMAnalyzer analyzer=new MMAnalyzer();

/**

* @param args

*/

public static void main(String[] args) {

// MMAnalyzer analyzer=new MMAnalyzer();

try {

File indexpath= new File("F://罗勋发的//");

IndexWriter writer=new IndexWriter(indexpath,

analyzer,true);

recrd=getConn(); //获取数据库的记录集

// while (recrd.next()) {

// System.out.println(recrd.getString(1));

//

// }

IndexBuilder(writer); //建立索引

BufferedReader bReader= new BufferedReader(new InputStreamReader(System.in));

String query=bReader.readLine();

// System.out.println(query);

Hits hits= search(query); //输入查询内容后,查询

for(int i=0;i<hits.length();i++){ //返回查询后结果

Document document=hits.doc(i);

System.out.println(document.get("ID"));

System.out.println(document.get("Name"));

System.out.println(document.get("age"));

}

} catch (Exception e) {

// TODO: handle exception

}

}

public static Hits search(String quString){ //搜索用户输入的字符

Hits hits=null;

try {

IndexSearcher iSearcher = new IndexSearcher("F://罗勋发的//");

QueryParser parser=new QueryParser("Name",analyzer);

Query query=parser.parse(quString);

// System.out.println(query.toString());

hits=iSearcher.search(query);

return hits;

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

public static void IndexBuilder(IndexWriter fWriter) throws Exception{ //建立索引

while(recrd.next()){

Directory ramDirectory=new RAMDirectory();

IndexWriter ramWriter=new IndexWriter(ramDirectory,

new StandardAnalyzer(),true);

Document document=new Document();

Field id= new Field("ID",recrd.getString("ID"),Field.Store.YES,

Field.Index.TOKENIZED);

Field name=new Field("Name",recrd.getString("Name"),Field.Store.YES,

Field.Index.TOKENIZED);

Field age=new Field("age",recrd.getString("age"),Field.Store.YES,

Field.Index.TOKENIZED);

document.add(id);

document.add(name);

document.add(age);

ramWriter.addDocument(document);

ramWriter.close();

fWriter.addIndexes(new Directory[]{ramDirectory});

}

}

public static ResultSet getConn() { //建立数据库连接,并返回结果

try {

Class.forName("com.mysql.jdbc.Driver");

String url="jdbc:mysql://localhost:3306/test";

Connection conn = DriverManager.getConnection(url, "root", "alen");

Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

String sql = "select * from student";

ResultSet rs = stmt.executeQuery(sql);

return rs;

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

}

如输入:alen

结果:1

alen

18

当然结果输出,你可以在下面代码控制:

for(int i=0;i<hits.length();i++){ //返回查询后结果

Document document=hits.doc(i);

System.out.println(document.get("ID"));

System.out.println(document.get("Name"));

System.out.println(document.get("age"));

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: