`
wwty
  • 浏览: 536903 次
  • 性别: Icon_minigender_1
  • 来自: 北京-郑州
社区版块
存档分类
最新评论

lucene开发过程中的问题总结

阅读更多

1、问题:
目前索引里面已经有1000多万的数据了,现在需要每几分钟就增量得添加新的内容到索引中。
但是,我发现新加入索引后,整个索引结构都要重新调整。非常耗时(长达半个小时)。
不知道大家有没有什么比较好的办法,加快这个过程?

回答:
我觉得用lucene做,一个原则索引里面尽量少存储,索引文件小了,optimize要移动的数据块也小。
还有Lucene实在不适合做实时,有一个办法,将新索引建在内存中,新建在内存上的searcher与硬盘索引searcher合并为MutliSearcher提供给前端搜索,
内存到达一定量时再后台合并到主索引上,合并完成用新的Searcher替换MutliSearcher。 --来自网络,仅供学习

RAMDirectory和FSDirectory相结合使用

//创建基于RAMDirectory的索引
RAMDirectory rd = new RAMDirectory();
IndexWriter iw = new IndexWriter(rd,new StandardAnalyzer());
….
//向基于RAMDirectory的索引中添加文档
iw.addDocument(doc);
iw.close();
//建立基于FSDirectory的索引
FSDirectory fd = FSDirectory.getDirectory("mix");
IndexWriter writer = new IndexWriter(fd,new StandardAnalyzer());
//把缓存在RAMDirectory中的所有数据写入FSDirectory
writer.addIndexes(new Directory[] {rd});
writer.close();

同样可以反过来用,将文件系统中的索引读入内存中,就需要使用如下的方法:
RAMDirectory rd=new RAMDirectory();

 

2、上周在使用范围搜索时又遇到问题 ,程序抛出TooManyClauses  exception。后来才发现lucene将范围搜索转化为精确匹配,每个匹配对应一个clause,所以如果你的范围如果包含超过1024个索引值,程序就会抛错

方案1:BooleanQuery.setMaxClauseCount(Integer.MAX_VALUE)

改变限制,这个可以解决问题,但有隐患,如果某个范围的索引特别多,内存会有爆掉的危险。

方案2:使用filter--来自网络,仅供学习

 

3、昨天改了一个晚上代码都无法使搜索引擎创建文件索引到硬盘中,经过调试发觉已经把文档、字段提取到了内存索引器中,然而在把内存索引书写器中的索引传递给硬盘索引书写器时似乎没有传送成功,
只出现segments.gen和segments_2。单独使用FSDirectory时,却是在硬盘相应目录中能够看到索引文件啊!

fsWriter.addIndexesNoOptimize(Directory[] {ramdir});

明明已经写上了这句了啊?第二天上午翻翻资料,发觉有一份资料强调:在合并内存索引器的索引到硬盘索引器前,务必先关闭内存索引器。于是我试着在前面加上"ramWriter.close();",果然终于出现了久违的.cfs文件。

这个问题的关键是在任何时候对索引的更新操作的实例只能有一个存在

分享到:
评论

相关推荐

    Lucene搜索引擎开发进阶实战_PDF电子书下载

    结合笔者的实际开发经验,总结了一些新的开发技巧和开发思路,并对网上流传的一些错误...本书既可为零起点的Lucene初学者提供系统全面的学习指导,也可帮助有相关经验的开发者解决在开发过程中遇到的一些难题和疑惑。

    Lucene搜索引擎开发权威经典 光盘

    Lucene搜索引擎开发权威经典 光盘 于天恩 著 中国铁道出版社出版 2008-10 这本书基于Lucene的当前最新版本(2.1)精解了Lucene搜索引擎的相关知识,从基础知识到应用开发,精练简洁,恰到好处。 本书共包括16章,...

    基于lucene的搜索引擎总结

    Field:每个Document包含一个或多个不同命名的Field,每个Field对应一段数据,这些数据在搜索过程中可能会被查询或在索引中被检索 全文索引/搜索 Lucene索引代码示例: Directory dir = FSDirectory.getDirectory...

    解密搜索引擎技术实战-Lucene&java;精华版

    包括了中文分词与词性标注的理论与实现及在搜索引擎中的应用等细节,同时对文档排重、文本分类、自动聚类、句法分析树、拼写检查等自然语言处理领域的经典问题进行了深入浅出的介绍,并总结了实现方法。在全文检索...

    solr资料以及问题汇总

    solr的一些资料,常见问题解决方法汇总,开发过程中收集的

    微信公众平台应用开发:方法、技巧与案例.(机械工业.柳峰)

    第四部分(第7~11章)首先总结了一些实用的公众平台开发技巧,如使用表情、识别微信浏览器、图文消息使用、公众账号无响应处理、服务多个账号等,然后逐步详细地讲解了“周边搜索”、“猜数字”(游戏)和“聊天...

    Eclipse开发分布式商城系统+完整视频代码及文档

    项目中遇到的问题.avi │ 13.quartz.avi │ aa.quartz框架.avi │ 淘淘商城第十二天笔记.docx │ ├─补充1:拔高课程(Redis3.0持久化、集群、MySQL5.6优化、Tomcat7优化) │ │ 打开必读.txt │ │ │ ├─课前...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    数据库开发基础、Microsoft SQLServer基础、SQL语言基础、索引、事务、SQL语言高级技术(空值处理、聚合与分组、数据分页、Union、日期函数、类型转换函数、流控函数、表连接、子查询、存储过程、触发器)、数据库...

    涵盖了90%以上的面试题

    面向对象的开发方式有什么优点 组合和继承有什么区别 多态的实现机制是什么 重写和重载的区别 抽象类和接口有什么区别 break如果跳出多重循环 final,finally和finalize有什么区别 使用switch时有哪些注意事项 ...

    Hadoop基础培训教程.pdf

    预测 数据挖掘与BI 机器学习与Google大 脑 起源与目标 大数据与Hadoop 应用模式 大数据技术IT人员的挑战——DevOps DevOps Development和Operations的 组合,是一组过程、方法与 系统的统称,用于促进开发 ...

    jblog:一个简洁漂亮的Java博客,基于Spring MVC + Hibernate + MySQL + Bootstrap + freemarker。实现

    博客 通过Spring / MVC + Hibernate + Hibernate-search + MySQL ...写作的过程中会总结增强理解 分享能帮助有需要有人,还能在线与人交流一起探讨 下次遇到此类问题有据可查 温故而知新 等等... 遇到的问题&新生 写作

Global site tag (gtag.js) - Google Analytics