如何用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...

面试题 相关文章推荐
Yahoo-PHP面试题3
Jan 14 面试题
构造方法和其他方法的区别?怎么调用父类的构造方法
Sep 22 面试题
武汉世纪畅想数字传播有限公司 .NET笔试题
Jun 13 面试题
网络安全类面试题
Aug 01 面试题
局域网标准
Sep 10 面试题
What's the difference between Debug and Trace class? (Debug类与Trace类有什么区别)
Sep 10 面试题
internal修饰符起什么作用
Dec 16 面试题
Linux的文件类型
Jul 05 面试题
linux面试题参考答案(11)
May 01 面试题
什么是SCM(软件配置管理)
Aug 16 面试题
如何提高MySql的安全性
Jun 19 面试题
举例说明类变量和实例变量的区别
Jun 30 面试题
名词解释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
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
2007/04/12 Javascript
javascript实现的在当前窗口中漂浮框的代码
2010/03/15 Javascript
在jquery中处理带有命名空间的XML数据
2011/06/13 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
巧用jQuery选择器提高写表单效率的方法
2016/08/19 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
2017/03/08 Javascript
微信小程序 图片宽度自适应的实现
2017/04/06 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
2017/07/04 Javascript
Vue响应式原理深入解析及注意事项
2017/12/11 Javascript
JS设计模式之观察者模式实现实时改变页面中金额数的方法
2018/02/05 Javascript
JavaScript私有变量实例详解
2019/01/24 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
2020/02/11 Javascript
Python自定义scrapy中间模块避免重复采集的方法
2015/04/07 Python
Python中pip安装非PyPI官网第三方库的方法
2015/06/02 Python
python的文件操作方法汇总
2017/11/10 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
解决PySide+Python子线程更新UI线程的问题
2019/01/11 Python
Python3实现的回文数判断及罗马数字转整数算法示例
2019/03/27 Python
Python浮点数四舍五入问题的分析与解决方法
2019/11/19 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
2020/02/11 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
社团文化节邀请函
2014/01/10 职场文书
新年主持词
2014/03/27 职场文书
家长会演讲稿
2014/04/26 职场文书
募捐倡议书怎么写
2014/05/14 职场文书
经典团队口号大全
2014/06/21 职场文书
幼师求职信
2014/06/23 职场文书
乡镇挂职心得体会
2014/09/04 职场文书
php双向队列实例讲解
2021/11/17 PHP
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android