论搜索引擎solr与MongoDB的整合

环境:

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下对副本集进行初始化:

[email protected]:~/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命令吧:

[email protected]:~/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="_id" type="string" indexed="true" stored="true" />
<field name="_ts" type="long" indexed="true" stored="true" />
<field name="ns" type="string" indexed="true" stored="true"/>

最好是这几处放在一块,做个标记,以后方便查询嘛,另外,此处存坑:

注释掉原来的

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />

不然往Solr中添加一个json,或者xml都会要求有这个字段id,因为required="true"嘛,这些东西都是我遇到问题后发现的。

schema.xml的修改就是这些。

b>

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

打开:

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

<requestHandler name="/admin/luke"       class="solr.admin.LukeRequestHandler" />

解注释,这个东西要被mongo-connector用到,mongo-connector会请求获取上面的schema.xml,正是这个Handler来处理这个请求,所以说这个很重要。而似乎官方文档认为我们这个就是默认开启的,并没有提到此事,所以说巨坑!

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中用*:*查询,就会显示出更新。

时间: 2024-10-31 03:43:52

论搜索引擎solr与MongoDB的整合的相关文章

Solr系列二:Solr与mmseg4j的整合

mmseg4j是一个很好的中文分词器,solr与mmseg4j的整合也非常简单.如下: 第一步:下载mmseg4j的jar包,网上搜索一下有很多下载地址,如下是csdn上的一个连接:http://download.csdn.net/detail/nrs12345/6986585 第二步:将下载的mmseg4j-analysis-1.9.1.jar.mmseg4j-core-1.9.1.jar.mmseg4j-solr-2.2.0.jar这三个jar包复制到tomcat下的webapps/solr

【solr】solr5.0整合tomcat

1.下载 solr版本必须和lucene版本一致,这个链接http://archive.apache.org/dist/lucene/是apache子项目库,在这里可以下载lucene,我这里使用的是5.0版本 注意6.0之后,官方推荐使用jdk8,tomcat8了. 2.启动 solr默认使用内置的jetty来启动,如下找到解压目录,直接用cmd命令进入, solr默认启动的端口是8393,直接在浏览器输入http://127.0.0.1:8983/solr/即可访问,如下 所以这里只是启动,

【solr】solr5.0整合中文分词器

1.solr自带的分词器远远满足不了中文分词的需求,经查使用最多的分词器是solr是mmseg4j分词器,具体整合大家可以参考 https://github.com/zhuomingliang/mmseg4j 一定要注意版本 2.将这两个包直接拷贝到tomcat下的solr/lib中 3.在solr/java里新建dic目录将词库拷贝进去 4.直接在浏览器http://127.0.0.1:8080/solr即可如下分词结果 ok,分词整合完毕!

搜索引擎solr和elasticsearch

刚開始接触搜索引擎,网上收集了一些资料.在这里整理了一下分享给大家. 一.关于搜索引擎 搜索引擎(Search Engine)是指依据一定的策略.运用特定的计算机程序从互联网上搜集信息.在对信息进行组织和处理后,为用户提供检索服务.将用户检索相关的信息展示给用户的系统. 搜索引擎包含全文索引.文件夹索引.元搜索引擎.垂直搜索引擎.集合式搜索引擎.门户搜索引擎与免费链接列表等. 一个搜索引擎由搜索器 .索引器 .检索器 和用户接口 四个部分组成.搜索器的功能是在互联网 中漫游,发现和搜集信息.索引

企业级搜索引擎Solr使用入门指南

由于搜索引擎功能在门户社区中对提高用户体验有着重在门户社区中涉及大量需要搜索引擎的功能需求,目前在实现搜索引擎的方案上有集中方案可供选择: 基于Lucene自己进行封装实现站内搜索. 工作量及扩展性都较大,不采用. 调用Google.Baidu的API实现站内搜索 同第三方搜索引擎绑定太死,无法满足后期业务扩展需要,暂时不采用. 基于Compass+Lucene实现站内搜索 适合于对数据库驱动的应用数据进行索引,尤其是替代传统的like ‘%expression%’来实现对varchar或clo

solr(四): centos中, 整合 tomcat

前言 虽然windows下, tomcat和solr整合起来灰常的方便, 但是, 一般像这种东西, 都很少部署在windows中, 更多的是部署到linux中去. 其实, 步骤是一样的, 这里, 我在centos 中再部署一次. 下包 下载地址还是之前的那个: http://mirror.bit.edu.cn/apache/lucene/solr/ 下载下来之后, 放到centos中的 /home/elvin/Downloads 文件下. elvin 是我的用户名. 为了与第一篇对应, 我按照第

全文搜索引擎——Solr

1.部署solr a.下载并解压Solr b.导入项目(独立项目): 将解压后的 server\solr-webapp 下的 webapp文件夹 拷贝到tomcat的webapps下,并重命名为 solr c.加入jar包 及 log4j配置: 将解压后的 server\lib\ext 下的所有 jar包 拷贝到 tomcat下solr项目的 lib中 将解压后的 server\lib 下的所有 metrics 开头的 jar包 拷贝到 tomcat下solr项目的 lib中 将解压后的 dis

maven项目下solr和spring的整合配置

前言: solr和spring整合其实很简单,只要注意导入依赖的配置文件即可.废话不多说,上代码. 第一步:编写maven项目的pom文件,导入依赖 [html] view plain copy<project?xmlns="http://maven.apache.org/POM/4.0.0"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"??????xsi:schemaLocation="

搜索引擎 solr

1.创建索引 举例子: 文档一:solr是基于Lucene开发的企业级搜索引擎技术 文档二:Solr是一个独立的企业级搜索应用服务器,Solr是一个高性能,基于Lucene的全文搜索服务器 首先经过分词器分词,solr会为分词后的结果(词典)创建索引,然后将索引和文档id列表对应起来,如下图所示: 比如:solr在文档1和文档2中都有出现,所以对应的文档ID列表中既包含文档1的ID也包含文档2的ID,文档ID列表对应到具体的文档,并体现该词典在该文档中出现的频次,频次越多说明权重越大,权重越大搜