[版权声明] 本站内容采用 知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆 (CC BY-NC-SA 3.0 CN) 进行许可。
部分内容和资源来自网络,纯学习研究使用。如有侵犯您的权益,请及时联系我,我将尽快处理。
如转载请注明来自: Broly的博客,本文链接: CentOS7+Tomcat+Solr5+MariaDB+Mmseg4j
根据项目要求,需要搭建一个搜索引擎的功能,网上找了下资料,发现挺多开源的搜索引擎的。经过对比和考虑,最终决定使用Solr。
一、测试环境
系统: CentOS 7.0 (x64)
1 2 |
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.0.1406 (Core) |
二、安装Tomcat、MariaDB、Java
之前的一篇博文:《CENTOS+NGNIX+TOMCAT+MARIADB+JAVA环境搭建》里面已经有详细介绍如何搭建这个环境了,至于Nginx其实也可以安装一个,然后反向代理Tomcat应用服务器就行了。
这里我只安装了Tomcat,默认用的端口是8080的。(记得把8080加入防火墙白名单,不然外部访问不了)
三、安装并配置Solr
我选用的是5.3.0版本的Solr
1. 去官网找了个速度比较快的镜像,把安装包下载下来,并解压
1 2 |
[root@localhost ~]# http://mirror.bit.edu.cn/apache/lucene/solr/5.3.0/solr-5.3.0.tgz tar -xzf solr-5.3.0.tgz |
2. 将目录solr-5.3.0/server/solr-webapp/webapp复制到Tomcat的webapps目录下,并重命名为solr。(注:用yum安装的Tomcat的webapps位置在/var/lib/tomcat/)
1 |
[root@localhost ~]# cp -rf solr-5.3.0/server/solr-webapp/webapp /var/lib/tomcat/webapps/solr |
3. 将目录solr-5.3.0/server/lib/ext/下的所有jar包复制到/var/lib/tomcat/webapps/solr/WEB-INF/lib/目录下
1 |
[root@localhost ~]# cp -rf solr-5.3.0/server/lib/ext/*.jar /var/lib/tomcat/webapps/solr/WEB-INF/lib/ |
4. 将目录solr-5.3.0/server/resources/下的log4j.properties文件复制到/var/lib/tomcat/webapps/solr/WEB-INF/目录下
1 |
[root@localhost ~]# cp -f solr-5.3.0/server/resources/log4j.properties /var/lib/tomcat/webapps/solr/WEB-INF/ |
5. 将目录solr-5.3.0/dist下的solr-dataimporthandler-5.3.0.jar和solr-dataimporthandler-extras-5.3.0.jar复制到/var/lib/tomcat/webapps/solr/WEB-INF/lib/目录下
1 |
[root@localhost ~]# cp -f solr-5.3.0/dist/solr-dataimporthandler-* /var/lib/tomcat/webapps/solr/WEB-INF/lib/ |
6. 将目录solr-5.3.0/server/solr复制到/home/目录下,并重命名为solr_home,更改用户组为tomcat
1 2 |
[root@localhost ~]# cp -rf solr-5.3.0/server/solr /home/solr_home [root@localhost ~]# chown -R tomcat.tomcat /home/solr_home/ |
7. 修改/var/lib/tomcat/webapps/solr/WEB-INF/web.xml文件,找到如下配置的,把注释去掉,并修改<env-entry-value>的值为/home/solr_home,就是刚刚我们创建的
1 2 3 4 5 |
<env-entry> <env-entry-name>solr/home</env-entry-name> <env-entry-value>/home/solr_home</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry> |
8. 重启Tomcat
1 |
[root@localhost ~]# systemctl restart tomcat.service |
9. 如果不出意外,现在应该是能访问到solr的后台页面了
四、配置Solr的core
先要复制一份Solr自带的基本配置,然后记得把文件夹组也改一改,再重启下Tomcat。如果不事先创建这个配置,直接在管理后台操作会报错的。
1 2 3 |
[root@localhost ~]# cp -rf /home/solr_home/configsets/basic_configs/ /home/solr_home/new_core [root@localhost ~]# chown -R tomcat.tomcat /home/solr_home/ [root@localhost ~]# systemctl restart tomcat.service |
然后在管理后台点击左侧栏下面的新建core,确定即可。
五、添加mmseg4j中文分词插件
mmseg4j官网:https://github.com/chenlb/mmseg4j-solr
1. 下载需要mmseg4j-core-1.10.0.jar和mmseg4j-solr-2.3.0.jar共两个jar包(根据官网提示Solr5.0以上的版本需要第2个包)
可以在maven库上找到这些包:http://maven.oschina.net/home.html
2. 复制到/var/lib/tomcat/webapps/solr/WEB-INF/lib目录下
3. 编辑/home/solr_home/new_core/conf/schema.xml配置文件,在尾部增加以下代码,重启tomcat:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<fieldType name="currency" class="solr.CurrencyField" precisionStep="8" defaultCurrency="USD" currencyConfig="currency.xml" /> <fieldtype name="textComplex" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" /> </analyzer> </fieldtype> <fieldtype name="textMaxWord" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" /> </analyzer> </fieldtype> <fieldtype name="textSimple" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" /> </analyzer> </fieldtype> |
4. 在后台管理页面,点击analysis,随便输入点中文,选择textComplex,即我们自定义的类型,点击分析就能看到分词效果了。
六、添加从MySQL/MariaDB导入数据功能
1. 从MySQL官网下载驱动包mysql-connector-java-5.1.38-bin.jar
http://dev.mysql.com/downloads/connector/j/
2. 把包放到/var/lib/tomcat/webapps/solr/WEB-INF/lib目录下
3. 新建/home/solr_home/new_core/conf/data-config.xml文件,并写入配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<dataConfig> <dataSource name="testdb" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/solr" user="test" password="test" /> <document> <entity name="data1" dataSource="testdb" query="select * from data1" deltaImportQuery="select * from data1 where id = '${dataimporter.delta.id}'" deltaQuery="select id from data1 where modified_time > '${dataimporter.last_index_time}'"> <field column="id" name="id" /> <field column="title" name="title" /> <field column="content" name="content" /> </entity> </document> </dataConfig> |
说明:
dataSource节点指定数据源
dataSource节点的url属性//127.0.0.1:3306/solr,分别指//[数据库IP]:[数据库端口]/[数据库名称],user属性是数据库用户,password属性是数据库密码
document节点将对应数据源的数据映射为Solr的(其实是Lucene)一个Document。
entity节点指定document的具体数据,对应数据库表的行数据。
field节点设定要检索的字段。
entity下的query属性,指定获取全量数据的SQL语句
entity下的deltaImportQuery属性,指定增量获取数据的SQL语句,以deltaQuery的主键数据为条件。
entity下的deltaQuery属性,指定获取数据主键。
entity下的parentDeltaQuery属性,指定获取父entity主键的SQL语句
我的数据库结构和内容:
4. 编辑/home/solr_home/new_core/conf/schema.xml配置文件,找到: <uniqueKey>id</uniqueKey>,在下面添加:
1 2 3 4 |
<uniqueKey>id</uniqueKey> <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> <field name="title" type="text_general" indexed="true" stored="true" required="true" /> <field name="content" type="textComplex" indexed="true" stored="true" required="true" /> |
注意:如果等下重启完solr之后进入后台报错,提示节点重复的话,你要检查一下这个文件是否有name重复的field,如果有根据实际情况把重复的去掉。而且这里field的name跟上面的data-config.xml文件要对应。
5. 编辑/home/solr_home/new_core/conf/solrconfig.xml文件,添加下面配置:
1 2 3 4 5 |
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler> |
6. 重启tomcat,并再次进入网页后台,找到"Dataimport",并点击"Execute Query"按钮,自己手动刷新下页面,成功的话会返回如图的结果:
7. 测试下是否已经从MySQL导入数据成功了。找到左侧菜单"Query",点击"Execute Query"按钮,成功的话会有数据返回:
七、小结
其实配置这些关键就是文件的配置,按部就班的弄基本不会出问题。这套solr应用环境,我是搭配起来供PHP使用的,PHP那边调用Solr的接口,可以很轻松的拿到数据。接下来的工作就是调整数据库的结构和内容,把自己实际需求的数据架构搭建起来,再逐步优化。