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

面试题 相关文章推荐
HashMap和Hashtable的区别
May 18 面试题
Java的基础面试题附答案
Jan 10 面试题
请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值
Sep 15 面试题
.NET remoting的两种通道是什么
May 31 面试题
什么是View State?
Jan 27 面试题
TCP协议通讯的过程和步骤是什么
Oct 18 面试题
介绍一下HDLC(High-Level Data Link Control)高层数据链路协议
Jan 21 面试题
什么是反射
Mar 17 面试题
string = null 和string = ''的区别
Apr 28 面试题
shell程序中如何注释
Feb 17 面试题
Python文件操作的面试题
Jun 22 面试题
德尔福集团DELPHI的笔试题
Feb 22 面试题
名词解释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
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
2013/05/08 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
2015/04/08 PHP
php关闭warning问题的解决方法
2016/05/17 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
2017/02/15 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
javascript window对象属性整理
2009/10/24 Javascript
基于JQuery 滑动与动画的说明介绍
2013/04/18 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
非常漂亮的相册集 使用jquery制作相册集
2016/04/28 Javascript
Bootstrap 填充Json数据的实例代码
2017/01/11 Javascript
详解Node.js access_token的获取、存储及更新
2017/06/20 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
2018/09/19 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
2018/09/22 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
JS计算两个数组的交集、差集、并集、补集(多种实现方式)
2019/05/21 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
javascript实现抢购倒计时程序
2019/08/26 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
使用Python监控文件内容变化代码实例
2018/06/04 Python
python os模块简单应用示例
2019/05/23 Python
python wsgiref源码解析
2021/02/06 Python
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
一级方程式赛车官方网上商店:F1 Store(支持中文)
2018/01/12 全球购物
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
澳大利亚头发和美容产品购物网站:OZ Hair & Beauty
2020/03/27 全球购物
护理专业应届毕业生推荐信
2013/11/15 职场文书
税务干部鉴定材料
2014/02/11 职场文书
文案策划求职信
2014/03/18 职场文书
高三毕业典礼主持词
2014/03/27 职场文书
兽医医药专业求职信
2014/07/27 职场文书
竞聘演讲稿怎么写
2014/08/28 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书
使用nginx动态转换图片大小生成缩略图
2021/03/31 Servers