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

面试题 相关文章推荐
10条PHP编程习惯
May 26 面试题
请问如下代码执行后a和b的值分别是什么
May 05 面试题
上海天奕面试题笔试题
Apr 19 面试题
.NET程序员的数据库面试题
Oct 10 面试题
RIP版本1跟版本2的区别
Dec 30 面试题
SQL注入攻击的种类有哪些
Dec 30 面试题
C#笔试题集合
Jun 21 面试题
C#里面可以避免一个类被其他类继承么?如何?
Sep 26 面试题
软件测试工程师面试问题精选
Oct 28 面试题
为什么要用EJB
Apr 17 面试题
Structs界面控制层技术
Oct 11 面试题
Ruby如何实现动态方法调用
Nov 18 面试题
名词解释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
神族 Protoss 历史背景
2020/03/14 星际争霸
php使用socket post数据到其它web服务器的方法
2015/06/02 PHP
非常有用的9个PHP代码片段
2016/04/06 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
2019/07/20 PHP
PHP7 错误处理机制修改
2021/03/09 PHP
对联广告js flash激活
2006/10/19 Javascript
jquery 实现checkbox全选,反选,全不选等功能代码(奇数)
2012/10/24 Javascript
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
jquery indexOf使用方法
2013/08/19 Javascript
FF IE浏览器修改标签透明度的方法
2014/01/27 Javascript
JavaScript中的console.time()函数详细介绍
2014/12/29 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
javascript判断图片是否加载完成的方法推荐
2016/05/13 Javascript
JS简单实现点击复制链接的方法
2016/08/03 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
jQuery列表检索功能实现代码
2017/07/17 jQuery
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
vue 优化CDN加速的方法示例
2018/09/19 Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
2019/09/24 Javascript
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
python中的lambda表达式用法详解
2016/06/22 Python
便捷提取python导入包的属性方法
2018/10/15 Python
实例讲解Python脚本成为Windows中运行的exe文件
2019/01/24 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
使用canvas一步步实现图片打码功能的方法
2019/06/17 HTML / CSS
REISS美国官网:伦敦最受欢迎的时尚品牌
2019/08/16 全球购物
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
27个经典Linux面试题及答案,你知道几个?
2013/01/10 面试题
九一八事变演讲稿
2014/09/05 职场文书
社区班子个人对照检查材料思想汇报
2014/10/07 职场文书
结婚通知短信大全
2015/04/17 职场文书
学校禁毒宣传活动总结
2015/05/08 职场文书
迎国庆主题班会
2015/08/17 职场文书
2019幼儿教师求职信(3篇)
2019/09/20 职场文书