环境:
Ubuntu 12.04 Solr 5.1.0 MongoDB db version:v2.0.4
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/
此处十分想吐槽网上那些业余的配置文档,凡是步骤一大片的文档最好不要看,否则整到头,到最后难过的还是你。
MongoDB的安装在Ubuntu下显得异常傻瓜,apt-get即是最好。
从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
然后在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
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
进入正题,找到修改的地方了,那么,修改吧:
打开
vi ./server/solr/configsets/sample_techproducts_configs/conf/schema.xml
将
id
替换成
_id
再添加
最好是这几处放在一块,做个标记,以后方便查询嘛,另外,此处存坑:
注释掉原来的
schema.xml的修改就是这些。
b>
此处又存在另外一个坑,其实我们还需要修改solrconfig.xml,要说这些东西都怎么发现的,被坑了之后碰出来的都。
打开:
vi ./server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
将
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那边的意思,似乎与官方文档完全相反,有待继续验证。
最终效果就是你在MongoDB中添加一条数据,1s之后在Solr中用*:*查询,就会显示出更新。