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

面试题 相关文章推荐
PHP如何去执行一个SQL语句
Mar 05 面试题
Android interview questions
Dec 25 面试题
不用游标的SQL语句有哪些
Sep 07 面试题
Oracle性能调优原则
May 03 面试题
WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?
Aug 25 面试题
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
Jul 11 面试题
编程实现去掉XML的重复结点
May 28 面试题
linux面试题参考答案(1)
Jan 22 面试题
linux面试题参考答案(3)
Sep 13 面试题
介绍一下linux的文件系统
Mar 20 面试题
若干个Java基础面试题
May 19 面试题
Jdbc数据访问技术面试题
Mar 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
杏林同学录(二)
2006/10/09 PHP
微盾PHP脚本加密专家php解密算法
2020/09/13 PHP
php使用异或实现的加密解密实例
2013/09/04 PHP
PHP删除指定目录中的所有目录及文件的方法
2015/02/26 PHP
php制作简单模版引擎
2016/04/07 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
添加JavaScript重载函数的辅助方法2
2010/07/04 Javascript
chrome浏览器不支持onmouseleave事件的解决技巧
2013/05/31 Javascript
javascript实现随时变化着的背景颜色
2015/04/02 Javascript
分享几种比较简单实用的JavaScript tabel切换
2015/12/31 Javascript
javascript先序遍历DOM树的方法
2016/02/27 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
2017/02/15 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
2018/11/05 Javascript
JsonProperty 的使用方法详解
2019/10/11 Javascript
vue中是怎样监听数组变化的
2020/10/24 Javascript
js实现自定义滚动条的示例
2020/10/27 Javascript
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
深入讲解Python中的迭代器和生成器
2015/10/26 Python
用Python编写简单的微博爬虫
2016/03/04 Python
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
python实现趣味图片字符化
2019/04/30 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
python模拟预测一下新型冠状病毒肺炎的数据
2020/02/01 Python
详解pyinstaller生成exe的闪退问题解决方案
2020/06/19 Python
python使用dlib进行人脸检测和关键点的示例
2020/12/05 Python
html5中的一些标签学习(心得)
2016/10/18 HTML / CSS
英国花园、DIY、电器和家居用品商店:Robert Dyas
2019/03/18 全球购物
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
企业管理毕业生求职信范文
2014/03/07 职场文书
读群众路线的心得体会
2014/09/03 职场文书
2015新学期家长寄语
2015/02/26 职场文书
物业前台接待岗位职责
2015/04/03 职场文书
python - timeit 时间模块
2021/04/06 Python
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js