一,尚待解决的难题
难题1, 目前索引与检索是两个独立的过程,索引建立完成后不能立即被检索到,如何才能做到所建即所得,也就是实现实时检索。
难题2,由于使用的是单字索引,post数据中存在着大量的不同的字符串,这些字符串会使得词典随着数据量的增长而迅速的膨胀,而词典是用来查询一个字的入口,必须放在内存中才能保证查询速度,这样就导致了内存不够使用。
难题3,按照每天一个索引去建立索引会导致词典的冗余,每一天的索引中必有一部分重复的字或字符串,汉字文本内容中大部分都是汉字,所以大部分都是一样的词典,冗余最厉害,而POST内容中大部分都是字符串,所以只有很小的一部分冗余,但是如果时间一长,冗余导致的浪费内存也是很可观的。解决的办法就是合并索引,但是合并索引的耗时会随着索引的膨胀迅速增长,并且合并索引给系统带来了更多的复杂度,更多的技术难题,究竟需不需要合并索引还有待仔细斟酌。
难题4,当前缓存查询出来的文档id号的方式不够优雅,查询出来的文档id号放到缓存中,索引一旦更新,上一次的缓存应该废除,废除的过程该如何和检索协调。
难题 5,究竟该以什么样的策略把索引分布到不同的服务器上,既要保证查询的高效,又要保证容易维护,容错能力可以不用要求很高。
开源搜索引擎名单:
Zoie
firtex
lucene
sphinx
apache solr
Elasticsearch
Katta
SolrCloud
Solandra
用lucene呗
目前基于国内开源项目firtex做了一部分了,但是困难重重,以上罗列出来的都是在开发中遇到的困难。 再换成Lucene等于是要重做了。
@HappyCodeIML: 任重而道远
将数据分为最新、最近、历史数据分别建立索引,然后采用多索引搜索,lucene.net提供了相关功能。提一个想法,此方法未经本人验证。