用lucene 搜索数据库主要分三步
1、第一步:拿出数据集
2、第二步:创建索引
3、第三步:搜索
第一步:
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connection = DriverManager.getConnection(url, user, password);
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery();
第二步:
Directory directory = FSDirectory.open(new File(buildIndexFilePath));
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
IndexWriter indexWriter = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);
while(resultSet.next()) {
Document document = new Document();
document.add(new Field("bankId", "" + resultSet.getString("BANK_ID"), Field.Store.YES , Field.Index.NO , Field.TermVector.NO));
document.add(new Field("bankName", "" + resultSet.getString("BANK_NAME"), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));
document.add(new Field("isSupportPassword", "" + resultSet.getString("IS_SUPPORT_PASSWORD"), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_OFFSETS));
document.add(new Field("payType", "" + resultSet.getString("PAY_TYPE"), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));
indexWriter.addDocument(document);
}
indexWriter.optimize();
indexWriter.close();
resultSet.close();
statement.close();
connection.close();
第三步:
//查询结果
IndexReader indexReader = IndexReader.open(directory);
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
QueryParser queryParser = new QueryParser(Version.LUCENE_30, "bankName", analyzer);
Query query = queryParser.parse("中信银行");
TopScoreDocCollector collector = TopScoreDocCollector.create(1000 , false);
indexSearcher.search(query, collector);
ScoreDoc[] scoreDocs = collector.topDocs().scoreDocs;
int numTotalHits = collector.getTotalHits();
System.out.println("共检索到的数量:" + numTotalHits);
for(int i=0; i<scoreDocs.length; i++) {
Document resultDocument = indexSearcher.doc(scoreDocs[i].doc);
String str = resultDocument.get("bankId");
String str2 = resultDocument.get("bankName");
System.out.println("str: " + str + " <> " + str2);
}
三步完成后,可以将结果放到list或者其它集合中,然后再页面中显示!
再来一个spring 定时器入门例子,嘿嘿,
有机会可以 用来 及时追加 数据库索引.
关于lucene3.0的排序,我纠结了好久,最后通过以下代码完成,原理,就是将时间转化为字符串,完毕
//按照时间的正序排列,如果SortField的第三个参数为true , 则为倒序
SortField sortField = new SortField("createDate", SortField.STRING, false);
Sort sort = new Sort ();
sort.setSort(sortField);
TopDocs topDocs = indexSearcher.search(query, null, 100, sort);
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
分享到:
相关推荐
lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0
Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 ...
lucene 3.0 API中文帮助,学习的人懂得的
Lucene3.0特性Lucene3.0特性
Lucene3.0之查询处理(1):原理和查询类型 各种Query对象详解
lucene3.0 中文分词器, 庖丁解牛
Lucene 3.0 原理与代码分析完整版
lucene3.0 实例,在jdk1.5,lucene3.0下调式通过,可以直接运行。先运行生成索引文件的class,在运行搜索的class。
Lucene学习总结之一:全文检索的基本原理 Lucene学习总结之二:Lucene的总体架构 Lucene学习总结之三:Lucene的索引文件格式(1) Lucene学习总结之三:Lucene的索引文件格式(2) Lucene学习总结之三:Lucene的...
lucene3.0的核心jar包文件,lucene3.0的核心jar包文件,lucene3.0的核心jar包文件,lucene3.0的核心jar包文件。
其中总体架构和索引文件格式是Lucene 2.9的,索引过程分析是Lucene 3.0的。 鉴于索引文件格式没有太大变化,因而原文没有更新,原理和架构的文章中引用了前辈的一些图,可能属于早期的Lucene,但不影响对原理和架构...
传智播客Lucene3.0课程,Lucene3.0的入门教程.
lucene升级了,分词也得升级哦! 在使用lucene3与paoding集成的时候可能会出现以下错误: Exception in thread "main" java.lang.AbstractMethodError: org.apache.lucene.analysis.TokenStream.incrementToken()Z ...
lucene3.0-highlighter.jar lucene3.0的高亮jar包,从lucene3.0源码中导出来的
Lucene 3.0 原理 Lucene 3.0 原理 Lucene 3.0 原理 Lucene 3.0 原理
全面好用的lucene 2.0 api以及lucene 3.0 api帮助文档
Lucene3.0浅析Lucene3.0浅析Lucene3.0浅析Lucene3.0浅析