基于Lucene的超强配置式索引应用
现在都说大数据量,数据量庞大的数据直接访问数据库不是一般的慢,那时就得使用高效率的文件索引
刚接触Lucene时已经出到4.4版本 (现在都4.6了,5.0也快出了),当然是Down了最新版本,使用之下发现数据才800万查询效率非常低 ,然后拼命的优化优化优化 ,没什么效果
Google很久之后看了一编Lucene 4.3与3.5版本的比较,觉得博主测试得很详细 ,看来4.x版本的Lucene还没3.5的好,当然最后还是牺牲点磁盘换取更高的效率,各位可以看看测试:
Lucene4.3和Lucene3.5性能对比(一)
Lucene4.3和Lucene3.5性能对比(二)
然后--这个配置索引
一般的Web项目,Spring容器管理Bean,数据库连接现为Oracle的JDBC
首页上有个单次效率测试和简单的压力测试(因为这里主要是服务器端,所以只配置了Servlet)(web.xml)
对外系统调用也有Hessian和HttpInvoker远程服务(remoting-servlet.xml)
使用quartz定时器控制索引的全量和增量线程(applicationContext-service.xml)
再说说这个配置方式的强大之处(config.xml解说)~~~
1.数据库URL、用户名、密码这些没神马好说的啦
2.自定义索引文件存放路径:index.dir
3.全量建索引时并发线程池大小:indexMaxThread
4.索引文件数量:indexMaxNumSegments(这个数量视全部索引大小来定,一般在50~200左右速度比较快)
5. 是否把索引内容加载进内存:useRAMDirectory(俺觉得这是本Project之亮点,硬盘不怎么给力或者索引本身不算大大,而内存又挺充足的,可以试试这个开关,体验飞一般的赶脚)
6. 一般索引这类服务都是很重要的,那就得做负载均衡和热备份啦:tomcatFlag,otherTomcatFlag(支持几个Tomcat同时对某数据库表进行索引,简单配置一下本身Tomcat代表的标识以及其它Tomcat标识,又一亮点)
7. 重点就是下面索引的具体配置,一个应用支持多个毫无关系的索引,每索引又多库表(比如:可以配置地图的点、线、区域三张表归为一个地图索引;又可以把机房、局站等资源类型的数据配置为另一个独立的索引,在同一个Tomcat上运行)
. 说到Lucene,那就必须得带着分词,本文使用的分词是自已写的阶乘切词算法,不管字符串是中文还是数字、字母,可以按顺序1、2、3、4个字的切成词,最长分词可以在代码设置,比之Standardanalyzer查询准确,又不用像庖丁哪样要字典库切词。具体可以查看InforesTokenizer类
对数据库的要求:要做索引的表,首先要做一个触发器,新增、修改、删除数据时都同步到日志表中,日志表包括字段:
主键:LOGID---NUMBER---
操作类型:OPER_TYPE---NUMBER---新增、修改、删除,数值可以自己定义
记录原表主键:XXX_ID---一般为NUMBER---视自己情况
Tomcat标识字段:TOMCAT_1---NUMBER(1)---如果还有其它Tomcat在做负载均衡,每个Tomcat增加一个自己标识的字段
最后贴上代码,好的话,点个赞噢~~~ 俺自己觉得这么犀利的东东,怎么无人爱呢
求楼下回答一下~