如何用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工程师面试题笔试题
Mar 27 面试题
北京RT科技有限公司.net工程师面试题
Feb 15 面试题
一套带网友答案的.NET笔试题
Dec 06 面试题
P/Invoke是什么
Jul 31 面试题
介绍一下write命令
Sep 24 面试题
软件测试工程师面试问题精选
Oct 28 面试题
MySQL面试题目集锦
Apr 14 面试题
介绍下Lucene建立索引的过程
Mar 02 面试题
初级Java程序员面试题
Mar 03 面试题
Java面向对象面试题
Dec 26 面试题
这76道Java面试题及答案,祝你能成功通过面试
Apr 16 面试题
UNIX文件名称有什么规定
Mar 25 面试题
名词解释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 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
php中截取字符串支持utf-8
2007/01/18 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
2014/11/06 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
2017/07/03 PHP
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
6个DIV 135或246间隔一秒轮番显示效果
2010/07/24 Javascript
工作中常用到的JS表单验证代码(包括例子)
2010/11/11 Javascript
仿谷歌主页js动画效果实现代码
2013/07/14 Javascript
jQuery自动切换/点击切换选项卡效果的小例子
2013/08/12 Javascript
判断ie的两种简单方法
2013/08/12 Javascript
js跑步算法的实现代码
2013/12/04 Javascript
javascript实时获取鼠标坐标值并显示的方法
2015/04/30 Javascript
简介JavaScript中的getSeconds()方法的使用
2015/06/10 Javascript
jquery对象访问是什么及使用方法介绍
2016/05/03 Javascript
js流动式效果显示当前系统时间
2016/05/16 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
Vue 使用beforeEach实现登录状态检查功能
2019/10/31 Javascript
如何利用JavaScript编写更好的条件语句详解
2020/08/10 Javascript
详解Python字符串对象的实现
2015/12/24 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
python使用PIL实现多张图片垂直合并
2019/01/15 Python
详解Python:面向对象编程
2019/04/10 Python
Python 监测文件是否更新的方法
2019/06/10 Python
Python如何定义接口和抽象类
2020/07/28 Python
用HTML5制作一个简单的桌球游戏的教程
2015/05/12 HTML / CSS
HTML5+Canvas+CSS3实现齐天大圣孙悟空腾云驾雾效果
2016/04/26 HTML / CSS
加拿大廉价机票预订网站:CheapOair.ca
2018/03/04 全球购物
荷兰游戏商店:Allyouplay
2019/03/16 全球购物
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
网络技术专业求职信
2014/02/18 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
运输公司工作总结
2015/08/11 职场文书
vue判断按钮是否可以点击
2022/04/09 Vue.js