lucene连接数据库的简单应用

Lucene作为当前较为强大的java全文搜索引擎,应用主要分为两步:
一、建立索引
package builder;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.DriverManager;

public class Builder {
public static ResultSet rs = null;
public static Statement statement = null;
public static Connection con = null;
public Builder() throws Exception{

}
/**
* @param args
*/
public static void main(String[] args) throws Exception{

/** 建索 */
IndexWriter indexWriter = new IndexWriter("c:/index", new StandardAnalyzer(),false);//???false时为追加索引
indexWriter.setMaxFieldLength(250000);//???设置建立索引的长度,就是对数据的前多少条建立索引
indexWriter.setMaxBufferedDocs(100);//控制写入一个新的segment前内存中保存的document的数目,设置较大的数目可以加快建索引速度
indexWriter.setMaxMergeDocs(100);// 控制一个segment中可以保存的最大document数目,值较小有利于追加索引的速度
indexWriter.setMergeFactor(100);// 控制多个segment合并的频率,值较大时建立索引速度较快,默认是10

System.out.println("开始取数据");
Class.forName("com.mysql.jdbc.Driver");
System.out.println("已装载驱动");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/testlucene?user=root&password=admin&useUnicode=true&characterEncoding=gbk");
System.out.println("已连接上数据库");
statement = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = statement.executeQuery("select id,title,content from article");
System.out.println("已读取数据集");
String id,title,content;
int j=0;
while(rs.next()){
Document doc = new Document();
id = rs.getString(1);
title =rs.getString(2);
content = rs.getString(3);
if(id == null)
id = "";
if(title == null)
title = "";
if(content == null )
content = "";
doc.add(new Field("id",id,Field.Store.YES,Field.Index.UN_TOKENIZED));
doc.add(new Field("title",title,Field.Store.YES,Field.Index.TOKENIZED,Field.TermVector.YES));
doc.add(new Field("content",content,Field.Store.NO,Field.Index.TOKENIZED,Field.TermVector.YES));
//doc.add(new Field("date",date,Field.Store.COMPRESS,Field.Index.TOKENIZED));
indexWriter.addDocument(doc);

System.out.println("已添加"+(++j)+"doc,其ID为:"+id);
}
indexWriter.optimize();
rs.close();
statement.close();
con.close();
System.out.println("结束取数据");
indexWriter.close();
System.out.println("已生成所有数据索引");

}

public static void getCon() throws Exception{

}
public static void getStatement() throws Exception{

}
}


二、搜索
package search;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

public class Search {
private static String indexPath = "c:/index";
public static void main(String[] args)throws Exception{
Directory directory = FSDirectory.getDirectory(indexPath, false);//???boolean值为false时可以进行查询
/** 搜索 */
IndexReader reader = IndexReader.open(directory);
IndexSearcher indexSearcher = new IndexSearcher(reader);
System.out.println("建立搜索引擎");
QueryParser parser = new QueryParser("content",new StandardAnalyzer());
System.out.println("建立搜索域和分析器");
Query query = parser.parse("好孩子");
System.out.println("提供搜索内容");
Hits hits = indexSearcher.search(query);
System.out.println("进行搜索并返回数据集");
for(int i=0;i<hits.length();i++){
Document doc = hits.doc(i);

System.out.println(doc.get("title"));
}
System.out.println("取得查询数据标题");
directory.close();
indexSearcher.close();
System.out.println("关闭搜索器");
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值