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

面试题 相关文章推荐
为什么要优先使用同步代码块而不是同步方法?
Jan 30 面试题
如何启动时不需输入用户名与密码
May 09 面试题
我能否用void** 指针作为参数, 使函数按引用接受一般指针
Feb 16 面试题
编写函数,将一个3*3矩阵转置
Oct 09 面试题
经典c++面试题二
Aug 14 面试题
C#里面如何倒序排列一个数组的元素?
Jun 21 面试题
ShellScript面试题一则-ShellScript编程
Jun 24 面试题
MySQL面试题目集锦
Apr 14 面试题
Boolean b = new Boolean(“abcde”); 会编译错误码
Nov 27 面试题
JAVA高级程序员面试题
Sep 06 面试题
UNIX文件名称有什么规定
Mar 25 面试题
什么是ESB?请介绍一下ESB?
May 27 面试题
名词解释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生成PDF格式文件并且加密
2015/06/22 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
Yii2 assets清除缓存的方法
2016/05/16 PHP
读jQuery之十二 删除事件核心方法
2011/07/31 Javascript
JS 数字转换研究总结
2013/12/26 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
JavaScript中定义对象原型的两种使用方法
2016/12/15 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
使用vue.js实现联动效果的示例代码
2017/01/10 Javascript
纯js实现图片匀速淡入淡出效果
2017/08/22 Javascript
使用vue-infinite-scroll实现无限滚动效果
2018/06/22 Javascript
Element Input组件分析小结
2018/10/11 Javascript
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
详解python破解zip文件密码的方法
2020/01/13 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
pycharm Tab键设置成4个空格的操作
2021/02/26 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
HTML5实现的图片无限加载的瀑布流效果另带边框圆角阴影
2014/03/07 HTML / CSS
世界上最大的罕见唱片、CD和音乐纪念品网上商店:991.com
2018/05/03 全球购物
德国旅游网站:weg.de
2018/06/03 全球购物
美国高档帽子网上商店:Hats.com
2018/08/09 全球购物
德国购买门票网站:ADticket.de
2019/10/31 全球购物
M.M.LaFleur官网:美国职业女装品牌
2020/10/27 全球购物
瑞典多品牌连锁店:Johnells
2021/01/13 全球购物
教师档案管理制度
2014/01/23 职场文书
军校大学生个人的自我评价
2014/02/17 职场文书
中班上学期个人总结
2015/02/12 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python
Mysql数据库事务的脏读幻读及不可重复读详解
2022/05/30 MySQL
Mysql中@和@@符号的详细使用指南
2022/06/05 MySQL