www.searchtech.pro
最后发现了elasticsearch这个分布式搜索框架,我一看它的介绍就觉得,就是它了。它基本上所有我想要的特性都包含了,分布式搜索,分布式索引,零配置,自动分片,索引自动负载,自动发现,restful风格接口。于是就开始使用,部署了四台机器,并把索引导了进去,我设置的分片为3,即把索引分成三片,副本为2,即有两份完整的索引。
通过它的管理工具可以很清晰的看到它索引分布的情况:哪块分布在那里,占用空间多少都可以看到,并且可以管理索引。还发现当一台机挂了时,整个系统会对挂机里的内容重新分配到其它机器上,当挂掉的机重新加入集群时,又会重新把索引分配给它。当然,这些规则都是可以根据参数进行设置的,非常灵活。对它的搜索效率进行测试,查询时间基本上维持在200毫秒左右,第二次搜索的话因为有缓存,所以和solr差不多。但经过详细对比测试后发现,solr在建索引时的查询性能非常之差,因为solr在建索引时会产生io的阻塞,造成搜索性能的下降,但elasticsearch不会,因为它是先把索引的内容保存到内存之中,当内存不够时再把索引持久化到硬盘中,同时它还有一个队列,是在系统空闲时自动把索引写到硬盘中。
它的存储方式有四种,1.像普通的lucene索引,存储在本地文件系统中。2.存储在分布式文件系统中,如freeds。3.存储在hadoop的hdfs中。4.存储在亚马逊的s3云平台中。它支持插件机制,有丰富的插件。比如和mongoDB couchDB同步的river插件,分词插件,hadoop插件,脚本支持插件等。它有个第三方的solr接口模拟插件,使用这个插件可以使你原本基于solr的系统无须改代码直接切换到elasticsearch中,它还是个准实时的搜索引擎,所谓实时搜索引擎就是当你索引一个文档后你搜索这个文档立即就能搜索到。于是就决定使用这套分布式搜索框架。
后记:之前还简单了解过LinkedIn的zoie,它也是个准实时搜索框架,不过它是不支持分布式的,现在LinkedIn开源出了基于zoie的分布式搜索框架sensei,这个没研究过,有空可以试下。
elasticsearch solr对比评测:http://engineering.socialcast.com/2011/05/realtime-search-solr-vs-elasticsearch/
elasticsearch官网:http://www.elasticsearch.org/