设为首页 收藏本站
查看: 753|回复: 0

[经验分享] solr是如何存储索引的

[复制链接]

尚未签到

发表于 2016-12-16 09:25:04 | 显示全部楼层 |阅读模式
我发现一直理解错了,我一直以为分布式索引和分布式搜索是两个不同的事情,其实是一样的.把索引分布在多台计算机上,不就是正好实现了分布式搜索吗?既然索引已经分布式存储了,,因为搜索就是基于索引的,那搜索就自然是分布式的啦。.前面看网上一些理解,一直以为分布式索 引和分布式搜索是两个独立分开的过程,不知道理解的对不对? 
  调研了一下,发现索引文件的数据结构相当复杂,这个好像是每提交一次建索引,就会将以前已生成的索引重新组织,而且还会生成新文件,所以如果采用在HDFS中追加写索引文件,那工作量将相当大,必须清楚了解索引文件数据结构及索引文件关联,下面有三篇对lucene索引结构的分析,我是没怎么看懂,有兴趣的可以看一下
1.http://www.cnblogs.com/mikehe1117/archive/2006/08/02/466264.html
2.http://blog.csdn.net/pangliyewanmei/article/details/5721113
3.http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623597.html

同理,用hbase来存放搜索索引文件也是不合理的,因为索引文件是分散管理,这些个小文件是互相关联的,每次都得把这些个小文件全取出来,才能正常查询


我现在知道为什么做分布式索引这么难呢?是因为索引小文件的整体关联性,不能随意拆分,我试了一下,如果将重新生成的段去掉后,那就不能 正常搜索,它会提示报错,少那个删去的文件。那分布式索引存储可行的方案就三种:

1.直接使用solr自带的分布式功能,即布署多台solr,选好master和slaves就可以了
2.使用HDFS分布式存储索引
3.使用Katta来管理索引

1.因为第一种索引文件是存储在多台机器的物理存储空间中的,而不是存在HDFS中,由于后面要用mahout做挖掘需要HDFS,所以第一种方案不适合
2.因为HDFS不适合存储大量小文件,会带来额外的计算开销。Nutch+solr的方案,也是将索引直接存在HDFS上的,没有考虑索引是小文件的问题,所以第二种直接将索引存在HDFS中并在HDFS中进行查询也是不可取的
参考资料:
1.hadoop如何处理小文件

既然索引文件是必须放在HDFS上的,而且还要避免小文件的问题,那么就只有两种方案可取:

1.直接通过java api将solr索引文件目录导到hdfs中,然后用katta来将索引切片
2.用Nutch将索引文件布署到hdfs中,然后用katta来将索引切片

第一种方案的优点是,不需要搭Nutch平台。如果是第二种方案,具说hadoop+lucene=nutch,这样是不是有点重复呢?nutch的一个重要组成部分就是网络爬虫,如果只是用来爬本地磁盘文件,,是不是有点大才小用呢?而且nutch更新索引相当麻烦,,需要修改脚本,而目前我们的系统是有 现成数据的,根本用不着nutch。nutch有两种方法实现分布式搜索:一种是将搜索的索引目录,设置在hdfs上;另一种是将索引分散拷到本地,然后用nutch server设置多个机器监听本地索引目录,后一种种需要手动操作,将索引拷到本地,但这一种更高效,因为好多资料都说不建议在 hdfs中直接查询

第一种方案的缺点是每提交一次索引,需要重新导一次索引文件到hdfs中,而且索引文件是调solrj来生成的,这个性能如何是未知的

第二种方案的优缺点自然就和第一种相反喽,第二种方案,还需要解决一个问题,那就是当上传一个新文档到gluster的时候,如何更新索引
 
开源项目Lily和Nut中也没提到如何存储及分发搜索索引

由于前面一直是在基于solr的基础上做的,,并且已经实现当新文档传到glusterfs中时,利用solrj来更新索引,所以想采用第一种方案,更新索引后,将索引文件同时提交到hdfs上,然后用katta来切分和管理索引

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-314985-1-1.html 上篇帖子: solr in action翻译-第三章Solr的关键概念 3.2 下篇帖子: 学习使用solr(一),solr和tomcat的配置及数据库中表的全量索引(下)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表