如何用Lucene索引数据库


Posted in 面试题 onFebruary 23, 2016
Lucene一个常见的用例是在一个或者多个数据库表进行全文检索。 虽然MySql有全文检索的功能,但是如果字段和数据量增加,MySql的性能会减低很快。
映射数据到Lucene
通常情况下最需要解决的问题是怎么把你数据库的数据描述到Lucene里面,最可能的解决方法法就是把你的数据表放到平面的Lucence Document对象里面。
用伪代码表示:
String sql = “select id, firstname, lastname, phone, email from person”;
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
Document doc = new Document();
doc.add(new Field(”id”, rs,getString(”firstname”), Field.Store.YES, Field.Index.UN_TOKENIZED));
doc.add(new Field(”firstname”, rs,getString(”firstname”), Field.Store.YES, Field.Index.TOKENIZED));
// … repeat for each column in result set
writer.addDocument(doc);
}
显示搜索结果
当显示搜索结果给用户时,你有两个选择:
1.因为你的Table已经扁平化到了Lucene里面,所以只需要用Document里面的Field.因为Lucene也非常快,这样会大大减低你的数据库的压力。
2.如果你要显示另外的数据到你的搜索结果页,你只需要在Hits里面收集他们的ID,然后从数据库去数据再根据结果组装搜索结果页。
要搜索的东西
以上列出的方式都是假设把整个结果集放到内存里面,这样在数据集大的话会很容易造成问题,你需要在你的SQL里面做一些分页或者offset
你还需要在你的结果集里面做一个try/catch,这样当添加一个Document出错的时候不会影响整个过程。
通常情况下可以把所有的field放到同一个”Contents” field然后只搜索这一个字段,但是需要保留这些field这样可以按field检索。
如果你需要检索多个table
通常最好能用不同的索引来搜索不同类型的数据,而不是把他们加到同一个index然后根据类型来区分。
原因:
可以更简单的维护操作。如果你只需要对这个表进行一个批处理的update,你只需要重建特定的索引而不是所有的索引。

Tags in this post...

面试题 相关文章推荐
大唐电信科技股份有限公司java工程师面试经历
Dec 09 面试题
Collection和Collections的区别
May 02 面试题
Tomcat中怎么使用log4j输出所有的log
Jul 07 面试题
定义一结构体数组表示分数,并求两个分数相加之和
Jun 11 面试题
南京软件公司的.net程序员笔试题
Aug 31 面试题
shallow copy和deep copy的区别
May 09 面试题
linux系统都有哪些运行级别
Mar 26 面试题
linux下进程间通信的方式
Jan 23 面试题
中间件分为哪几类
Sep 18 面试题
如何用Java判断一个文件或目录是否存在
Nov 19 面试题
Java中采用什么结构来捕获、处理异常?各子句的顺序、功能如何
Oct 07 面试题
一个J2EE项目团队的主要人员组成是什么
Jun 04 面试题
名词解释WEB SERVICE,SOAP,UDDI,WSDL,JAXP,JAXM;JSWDL开发包的介绍。
Oct 27 #面试题
JDO的含义
Nov 17 #面试题
如何实现jdbc性能优化
Jul 30 #面试题
开发中都用到了那些设计模式?用在什么场合?
Aug 21 #面试题
Java的接口和C++的虚类的相同和不同处
Mar 27 #面试题
数据库连接池的工作原理
Sep 26 #面试题
说出一些常用的类,包,接口
Sep 22 #面试题
You might like
超神学院:鹤熙已踏入神圣领域,实力不比凯莎弱
2020/03/02 国漫
php实现压缩多个CSS与JS文件的方法
2014/11/11 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
php代码检查代理ip的有效性
2016/08/19 PHP
Open and Print a Word Document
2007/06/15 Javascript
jQuery的学习步骤
2011/02/23 Javascript
jquer之ajaxQueue简单实现代码
2011/09/15 Javascript
用js的document.write输出的广告无阻塞加载的方法
2014/06/05 Javascript
jquery的幻灯片图片切换效果代码分享
2015/09/07 Javascript
详解JavaScript中的自定义事件编写
2016/05/10 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
2016/11/18 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
微信小程序支付及退款流程详解
2017/11/30 Javascript
详解vue表单——小白速看
2018/04/08 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
python插入排序算法的实现代码
2013/11/21 Python
用Python编写web API的教程
2015/04/30 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
Python list列表中删除多个重复元素操作示例
2019/02/27 Python
Python bytes string相互转换过程解析
2020/03/05 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
Python3爬虫中pyspider的安装步骤
2020/07/29 Python
python 通过 pybind11 使用Eigen加速代码的步骤
2020/12/07 Python
python3判断IP地址的方法
2021/03/04 Python
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
超市营业员求职简历的自我评价
2013/10/17 职场文书
原材料检验岗位职责
2014/03/15 职场文书
项目投资建议书
2014/05/16 职场文书
计算机专业毕业生自荐书
2014/06/02 职场文书
秋菊打官司观后感
2015/06/03 职场文书
大学生支教感言
2015/08/01 职场文书
小学课改工作总结
2015/08/13 职场文书
2016年元旦寄语
2015/08/17 职场文书
Golang表示枚举类型的详细讲解
2021/09/04 Golang
Golang 实现WebSockets
2022/04/24 Golang