用Lucene检索数据库
http://blog.sina.com.cn/s/blog_82ac67c101012r9z.html
package com.javabean;
import java.io.File;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.queryParser.QueryParser.Operator;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.SimpleFSDirectory;
import org.apache.lucene.util.Version;
public class lucene
{
public void createIndexFile() {
IndexWriter indexWriter=null;
try {
// 需要的分词器
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
// 创建的是哪个版本的IndexWriterConfig
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(
Version.LUCENE_36, analyzer);
// 创建系统文件-----
Directory directory = FSDirectory.open(new File(indexPath));
// 这里千万不能用SimpleFSDirectory, 不然会报错, 找错找到你哭
/* Directory directory = new SimpleFSDirectory(new File("D:\\tomcat-6.0.35\\webapps\\jsp_flex\\index")); */
indexWriter = new IndexWriter(directory,indexWriterConfig);
//访问数据库拿数据
DBConnect db = new DBConnect();
String sql = "select * from book";
ResultSet rs = db.select(sql);
while(rs.next())
{
//indexWriter添加索引
Document doc=new Document();
//文本中添加内容
doc.add(new Field("ISBN",rs.getString(1).toString(),Store.YES,Index.ANALYZED));
doc.add(new Field("bookname",rs.getString(2).toString(),Store.YES,Index.ANALYZED));
doc.add(new Field("author",rs.getString(3).toString(),Store.YES,Index.ANALYZED));
doc.add(new Field("leibie",rs.getString(6).toString(),Store.YES,Index.ANALYZED));
doc.add(new Field("jianjie",rs.getString(10).toString(),Store.YES,Index.ANALYZED));
//添加到索引中去
indexWriter.addDocument(doc);
}
} catch (IOException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
if(indexWriter!=null){
try {
indexWriter.commit();
indexWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void seacher(String queryString) throws IOException
{
FSDirectory fs;
try {
fs = FSDirectory.open(new File("D:\\tomcat-6.0.35\\webapps\\jsp_flex\\index"));
IndexReader ir = IndexReader.open(fs);
long start = System.currentTimeMillis();
IndexSearcher search = new IndexSearcher(ir);
String key = queryString;
String fieds[] = new String[]{"ISBN","bookname","author","leibie","jianjie"};
Analyzer ik = new StandardAnalyzer(Version.LUCENE_36);
MultiFieldQueryParser m = new MultiFieldQueryParser(Version.LUCENE_36, fieds, ik);
m.setDefaultOperator(Operator.AND);
Query query = m.parse(key) ;
ScoreDoc[] hits = search.search(query, null, 1000).scoreDocs;
System.out.println("共命中"+hits.length+"条记录");
for(ScoreDoc scoreDoc:hits)
{
Document doc= search.doc(scoreDoc.doc);
System.out.println(scoreDoc.score + "\t ISBN:"+doc.get("ISBN")+"\t bookname:"+doc.get("bookname")+"\t leibie:"+doc.get("leibie"));
}
System.out.println("执行时间:"+(System.currentTimeMillis()-start)+"毫秒");
}
catch (IOException e)
{
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException
{
lucene test = new lucene();
// test.createIndexFile();
test.seacher("中国");
}
}
用Lucene检索数据库的更多相关文章
- 【Java】Lucene检索引擎详解
基于Java的全文索引/检索引擎——Lucene Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能. L ...
- [原创]一种基于Python爬虫和Lucene检索的垂直搜索引擎的实现方法介绍
声明:本文首发在博客园晨星落羽,Shulin_Cao和lvmememe首页,转载请注明出处. 前言 2016.5到2017.5,我们三人(lvmememe,Shulin_Cao,晨星落羽)共同完成了一 ...
- 3.3 Lucene检索原理
Lucene是一个高效的,基于Java的全文检索库[1].所以在介绍Lucene的检索功能之前,我们要先了解一下全文检索以及Lucene的索引结构. 一.全文检索的基本原理 1. 数据的分类 什么是全 ...
- Elasticsearch原理学习--为什么Elasticsearch/Lucene检索可以比MySQL快?
转载于:http://vlambda.com/wz_wvS2uI5VRn.html 同样都可以对数据构建索引并通过索引查询数据,为什么Lucene或基于Lucene的Elasticsearch会比关系 ...
- Lucene学习之一:使用lucene为数据库表创建索引,并按关键字查询
最近项目中要用到模糊查询,开始研究lucene,期间走了好多弯路,总算实现了一个简单的demo. 使用的lucene jar包是3.6版本. 一:建立数据库表,并加上测试数据.数据库表:UserInf ...
- lucene 结合数据库做搜索
package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedSta ...
- Lucene检索提高性能的几个方式
1.采用最新版本的Lucene 2.索引文件存储采用本地文件系统,如果需要挂载远程系统,请采用 readonly方式. 3.当然采用更好的硬件,更高I/O的磁盘 4.提高OS 缓存,调整参数 5.提高 ...
- PHP项目:如何用PHP高并发检索数据库?
对于抢票.秒杀这种业务,我说说自己对这种高并发的理解吧,这里提出个人认为比较可行的几个方案: 方案一:使用队列来实现 可以基于例如MemcacheQ等这样的消息队列,具体的实现方案这么表述吧 比如有1 ...
- lucene 检索流程整理笔记
随机推荐
- DateTime类常用技巧摘录
//今天 DateTime.Now.Date.ToShortDateString(); //昨天,就是今天的日期减一 DateTime.Now.AddDays(-).ToShortDateString ...
- ArrayAdapter与SimpleAdapter的使用
在使用ListView中我们使用到adapter,android中为我们不仅提供了BaseAdapter类来让我们自定义自己的Adapter,还为我们提供了ArrayAdapter以及SimpleAd ...
- 解决 SQL Server Profiler 跟踪[不断]出现检索数据
问题简单回顾: 当我们使用SQL Server Profiler根据数据时,有时刚打开什么也没干呢,就显示很多数据了,当我们用橡皮擦清除,没过两秒就又有了,如图: 是不是很恼火!~不怕,解决方案如下: ...
- tableviewCell的xib中collectionView签协议
- The web application [/codeMarket] registered the JBDC driver[.........] but failed to unregister it when the web application was stopped. To prevent
如果你报错了上面的这个严重,那么你的tomcat版本一定是在6.0.25之上的 原因:tomcat 6.025以后在sever.xml中引入了内存泄露侦测,对于垃圾回收不能处理的对像,它就会做日志. ...
- iOS开发中的错误整理,线程之间通信练习,加载图片的练习中出现的错误 -- Http请求错误
控制台打印:Application Transport Security has blocked a cleartext HTTP (http://) resource load since it i ...
- nginx配置反向代理示例
环境: nginx1:192.168.68.41 tomcat1:192.168.68.43 tomcat2:192.168.68.45 nginx安装网上很多教程,我是用yum安装的. 配置ngin ...
- ES6的模块、构建工具及应用的发布
作者:寸志链接:https://zhuanlan.zhihu.com/p/19569085来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 总的说来就是按照将来的标准书写 ...
- Cocos2d-X3.0 刨根问底(二)----- 从HelloWorld开始
小鱼习惯直接从代码实例来学习一套成型的引擎库. 运行cpp-empty-test 一个典型的HelloWorld程序翻看代码结构 看到了 main.h与main.cpp文件就从这里开始 #ifndef ...
- BZOJ2535 [Noi2010]Plane 航空管制2
Description 世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此,小X表示很不满意. 在这次来烟台的路上 ...