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

[经验分享] 论搜索引擎solr与MongoDB的整合

[复制链接]

尚未签到

发表于 2015-11-11 15:37:22 | 显示全部楼层 |阅读模式
  环境:
  

Ubuntu 12.04  Solr 5.1.0  MongoDB db version:v2.0.4
  

1. Solr配置与MongoDB的安装
  Solr安装配置到目前已经非常简单,参考官方文档:http://lucene.apache.org/solr/quickstart.html,官方文档中用的是cloud这个样例(-e 指定),最后,我采用的是techproducts,基本命令如下:
  

/:$ ls solr*
solr-5.1.0.zip
/:$ unzip -q solr-5.1.0.zip
/:$ cd solr-5.1.0/
bin/solr start -e techproducts -noprompt
  
  按照官方文档所说,如果你想用完后关闭solr并清除这个样例底下的数据,那么请运行
  

bin/solr stop -all ; rm -Rf example/techproducts/

之所以把这几条命令提出来,那是因为在整个过程中你可能不停的要启动,关闭,清除,一直到ok。
  
  此处十分想吐槽网上那些业余的配置文档,凡是步骤一大片的文档最好不要看,否则整到头,到最后难过的还是你。
  MongoDB的安装在Ubuntu下显得异常傻瓜,apt-get即是最好。

2. Solr与MongoDB的整合
  从Solr官方给的quickstart文档上来看,它可以搜索xml, json, csv等多种文档,但丝毫看不出这东西还能跟MongoDB整合,但是万能的人类总是能想办法把他们弄到一起,或许真的有全能神吧。


  还好,leader说:可以的,随手扔给了我一个链接 http://www.cnblogs.com/sysuys/p/3403670.html。但是当我看到里面的Solr版本是4.5时,我的内心是崩溃的,但是没有办法了,似乎也找不到更好的办法了。
  于是,我发挥一不怕死,二不怕苦的精神,我硬着头皮往下读,突然,一片绿洲出现在我的眼前,尼玛这个文档里面有个github地址,而且正是用的github这个东西啊。
  对,就是这个mongo-connector https://github.com/10gen-labs/mongo-connector/wiki/Getting-Started,瞧,我们又找到了一个官方文档了,嗯,靠谱。但最后的结果让我决定我还是得整理出来一个适合自身国情发展需要的配置文档来。
  算了,废话太多,直接步骤吧:
  1). 建立MongoDB的replica set(副本集,大概是这么翻译的).
  在使用apt-get安装完MongoDB之后,系统会自行启动MongoDB的服务器,我们将其杀死:
  

pkill mongod

然后指定副本集启动:  
  

mongod --replSet myDevReplSet

MongoDB的终止和启动似乎就是这么简单,你要是像上面这样启动,它就在前台运行,你需要再次结束时,直接Ctrl+C,如果启动时加上&,它就在后台运行,当然也就得用pkill或者kill了。  
  然后在mongo shell下对副本集进行初始化:
  

weizheng@weizheng-HP-Pro-2080-Microtower-PC:~/solr-5.1.0$ mongo
MongoDB shell version: 2.0.4
connecting to: test
PRIMARY> rs.initiate()这个时候MongoDB这一边就弄好了,很简单,就是要加一个副本集。  
  2). 安装mongo-connector
  安装参考https://github.com/10gen-labs/mongo-connector,十分简单,一条命令:
  

pip install mongo-connector

如果提示没有python-pip,apt-get一下便好。mongo-connector这个中间件好了,但是先别急着用,因为这个东西要读取Solr的配置文件,所以Solr中的一些地方弄好了,再用这个就又只是一条命令罢了。  
  3). Solr一端的配置
  这个要是参考mongo-connector及其他文章可就坑大了。
  a>


  首先它们会让你修改Solr的schema.xml这个文件,但是在熟悉Solr的真个过程中,连这个文件的毛都没见到,去哪修改啊。
  没有办法,这个时候找也得找,不找也得找,使用强大的find命令吧:
  

weizheng@weizheng-HP-Pro-2080-Microtower-PC:~/solr-5.1.0$ find . -name "schema.xml"
./server/solr/configsets/basic_configs/conf/schema.xml
./server/solr/configsets/sample_techproducts_configs/conf/schema.xml
./example/example-DIH/solr/tika/conf/schema.xml
./example/example-DIH/solr/mail/conf/schema.xml
./example/example-DIH/solr/solr/conf/schema.xml
./example/example-DIH/solr/rss/conf/schema.xml
./example/example-DIH/solr/db/conf/schema.xml
./example/techproducts/solr/techproducts/conf/schema.xml


好的,对应我们前面的techproducts样例,看起来结果中有两条相关,有这个关键字嘛,那大概就是这两个了,当然,这时候根据经验来说应该选择修改第一个的,因为前面有提到能清除用户的样例,也就是说第二个相关的schemal.xml是可以删除的,立即产生不好的预感,这个东西肯定是Solr开启时自动生成的,而怎么生成呢,绝大可能是上述第一个的位置schema.xml的副本,后面验证了,果然没错。  进入正题,找到修改的地方了,那么,修改吧:
  打开

vi ./server/solr/configsets/sample_techproducts_configs/conf/schema.xml
  将
  

<uniqueKey>id</uniqueKey>
  替换成
  

<uniqueKey>_id</uniqueKey>
  再添加
  

<field name=&quot;_id&quot; type=&quot;string&quot; indexed=&quot;true&quot; stored=&quot;true&quot; />
<field name=&quot;_ts&quot; type=&quot;long&quot; indexed=&quot;true&quot; stored=&quot;true&quot; />
<field name=&quot;ns&quot; type=&quot;string&quot; indexed=&quot;true&quot; stored=&quot;true&quot;/>
  
  最好是这几处放在一块,做个标记,以后方便查询嘛,另外,此处存坑:
  注释掉原来的
  

<field name=&quot;id&quot; type=&quot;string&quot; indexed=&quot;true&quot; stored=&quot;true&quot; required=&quot;true&quot; multiValued=&quot;false&quot; />

不然往Solr中添加一个json,或者xml都会要求有这个字段id,因为required=&quot;true&quot;嘛,这些东西都是我遇到问题后发现的。  
  schema.xml的修改就是这些。
  b>


  此处又存在另外一个坑,其实我们还需要修改solrconfig.xml,要说这些东西都怎么发现的,被坑了之后碰出来的都。
  打开:

vi ./server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
  
  将
  

<requestHandler name=&quot;/admin/luke&quot;       class=&quot;solr.admin.LukeRequestHandler&quot; />

解注释,这个东西要被mongo-connector用到,mongo-connector会请求获取上面的schema.xml,正是这个Handler来处理这个请求,所以说这个很重要。而&#20284;乎官方文档认为我们这个就是默认开启的,并没有提到此事,所以说巨坑!  
  c>
  配置文件就是上面两个,就是这块比较复杂,不敢保证其他版本的Solr也是这样。
  最后,我们按照之前说的关闭Solr,清除example/techproducts目录,重新再次启动Solr,重启techproducts样例会产生一些错误,那是因为修改了schema.xml,里面uniqueKey变成了_id,而不是id,所以会产生这些错误,但这些都可以忽略,不产生错误就说明有问题。之后你会发现,那两个配置文件被复制成了exmaple/techproducts这个样例的配置文件,就像上文说的。
  


  OK,Solr一端的配置完毕。
  4). 使用mongo-connector连接Solr与MongoDB
  如果你再一次参考github上的官方文档,恭喜,你又跳了一次坑,在目前的情况下,请运行:
  

mongo-connector --auto-commit-interval=1 -d solr_doc_manager -t http://localhost:8983/solr/techproducts
  注意,与官方不同的正是这个-t后面的链接,因为我们用的是techproducts样例,所以后面也应该加上这个名字,其实一开是完全不知到这个链接是干啥的,完全是各种误打误撞,鼠标点点出来的,这个--auto-commit-interval参数设为0,从实验结果来看,应该是一直都不会把MongoDB中的数据写传到Solr那边的意思,&#20284;乎与官方文档完全相反,有待继续验证。
  


  最终效果就是你在MongoDB中添加一条数据,1s之后在Solr中用*:*查询,就会显示出更新。

版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 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-138027-1-1.html 上篇帖子: solr4.9之配置中文分词smartcn 下篇帖子: solr入门与配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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