solr5.5集成IK分词及mysql定时数据同步的开发记录

目录

1.前言

2.java环境

2.1 安装jdk

2.1.1 64位安装

2.1.2 32位安装

2.1.3 环境变量

2.1.4 刷新权限

2.1.5 确认安装

3 安装tomcat8

3.1 修改端口号

3.2 设置tomcat-user

3.3 验证tomcat

4.配置solr

4.1 拷贝solr-webap

4.2 拷贝额外jar包

4.3 创建日志文件夹

4.4 创建数据区

4.5 设置solr/home

5.其他配置

6.关键字分词命中

7.清空solr数据

8.手工同步数据

9.参考文献


 

1.前言

solr主要用于全文搜索用的,类似我们看到在搜索框输入一个词或者字,就会自动下拉和此相关的记录,并且把关键字高亮的效果大多都是通过solr实现的。有人可能要说,直接用mysql模糊匹配不是就能实现吗?其实却是也是可以实现,在知识库数据量小的情况下,直接like模糊匹配就行了,找到相似的前多少条返回前端进行展示即可,但问题是,一般情况下知识库的内容都不是简单几千条或者几万条,知识库的数据量都是非常大,这时候如果还用like模糊匹配,你会发现简直就是灾难啊。like默认情况下是会扫全表的,这时候查询效率就非常慢,用户体验超级差。但是solr的搜索不同,简单说一下我对solr搜索的理解如下。

solr是对拿到的记录进行分词,将每个词进行保存,并将词和内容建立对应关系,并对此做索引。例如分出两个词A、B,后续如果还有新的文档记录过来也分出有A、B词的话,就会把文档也挂到对应这俩词的文档链表上。当我们输入内容进行查询的时候,会先对内容进行分词,根据词找到词对应的文档链表,然后把记录返回。可以简单理解为词是主键,和文档内容是一对多关系。当然实际的技术实现可能我说的要复杂的多。下面贴两个链接,有兴趣的可以自己去研究看一下。

           solr5.5最好配合tomcat8和jdk8,不然总会发现意想不到的问题。

           下面从环境搭建到solr部署记录下实际项目中关于solr的应用。

2.java环境

2.1 安装jdk

登录需要安装的主机之后,输入命令:uname –i。查看系统信息,如果是i386,则使用jdk-8u11-linux-i586.tar.gz 安装包;如果是x86_64,则使用jdk-8u171-linux-x64.tar.gz 安装包。从jdk安装包目录中拷贝相关安装包到/opt/java目录下进行安装即可。

2.1.1 64位安装

1>.把jdk-6u45-linux-x64.bin拷贝到新建的java目录下
           2>.解压缩:tar zxvf jdk-8u171-linux-x64.tar.gz

2.1.2 32位安装

1>.把jdk-8u11-linux-i586.tar.gz拷贝到java目录下
           2>.解压缩:tar zxvf jdk-8u11-linux-i586.tar.gz

2.1.3 环境变量

cd到根目录,执行:vi /etc/profile
     文件打开后,上下键,移动到底部, 开始插入:

--64位安装  

export JAVA_HOME=/opt/java/jdk1.8.0_171
export JAVA_BIN=/opt/java/jdk1.8.0_171/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH

  --32位安装      

export JAVA_HOME=/opt/java/jdk1.8.0_11
export JAVA_BIN=/opt/java/jdk1.8.0_11/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH

输入完毕,Esc,然后输入  :wq  保存退出

2.1.4 刷新权限

执行:. /etc/profile

2.1.5 确认安装

 命令行输入:java –version,查看版本,显示如下,则说明安装成功。

3 安装tomcat8

拷贝apache-tomcat-8.0.52.tar.gz至/opt/solr目录下,执行tar zxvf apache-tomcat-8.0.52.tar.gz 解压成功,修改apache-tomcat-8.0.52为tomcat-solr。

3.1 修改端口号

打开/opt/solr/tomcat-solr/conf/server.xml   修改默认8080端口为8007  修改AJP默认8009端口为8091

3.2 设置tomcat-user

打开/opt/solr/tomcat-solr/conf/tomcat-users.xml 在</tomcat-users>这一行上面新增如下行:
         

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="solr" password="solr_lzy" roles="manager-gui,manager-script,manager-jmx,manager-status"/>

最后一行是设置的用户solr,密码solr_lzy的用户具备这些访问权限。

3.3 验证tomcat

进入到tomcat-solr/bin/目录下,执行:./startup.sh
浏览器中输入:http://ip:8007 显示如下页面,则说明正常。

如果想查看tomcat中应用的状态,点击Server status,输入前面配置的用户名、密码既可以登录查看。tomcat验证成功之后,./shutdown.sh停止tomcat,然后进行后续操作。

4.配置solr

4.1 拷贝solr-webap

    复制solr-5.5.5/server/solr-webapp/webapp到tomcat下的webapps目录下,改名为solr。
    切换到 /opt/solr 目录下,执行:
    cp -r solr-5.5.5/server/solr-webapp/webapp tomcat-solr/webapps/solr

4.2 拷贝额外jar包

    把额外jar下的jar文件全部拷贝到 tomcat-solr/webapps/solr/WEB-INF/lib/ 目录下
    把将solr-5.5.5/server/lib/ext/目录下的所有jar包复制到tomcat-solr/webapps/solr/WEB-INF/lib/下。

    额外jar报主要包括几部分:

    IKAnalyzer2012FF_u2.jar   IK分词的jar包,亲测solr5.5可用

    pinyin4j-2.5.0.jar  pinyinAnalyzer4.3.1.jar  拼音分词搜索用到的jar

    solr-dataimportscheduler-1.1.1.jar   mysql自动同步用的jar,亲测solr5.5可用

    额外jar点我去下载

4.3 创建日志文件夹

    在opt/solr目录下新建solr-log目录,用来存放solr相关日志信息。

4.4 创建数据区


    将solr-5.5.0/server/solr目录复制到/opt/solr/solrhome 目录下,这个就是传说中的solr/home(存放检索数据)
    切换到opt/solr目录下,执行:cp -r solr-5.5.5/server/solr solrhome

4.5 设置solr/home

编辑tomcat-solr/webapps/solr/WEB-INF/web.xml文件,一下部分是注释的,把注释去掉。solr在启动的时候会去这个根目录加载相关信息。
          

<env-entry>
   <env-entry-name>solr/home</env-entry-name>
   <env-entry-value>/opt/solr/solrhome</env-entry-value>
   <env-entry-type>java.lang.String</env-entry-type>
</env-entry>


5.其他配置

其他配置主要是关于ik分词和log4j的配置文件,ik分词可以配置关键词字典和停用词字典。log4j配置文件可以配置solr服务运行时候的log日志目录。

6.关键字分词命中

目前solr搜索是基于IKAnalyzer做的中文分词,基础词库内容都是常用的词库,例如人民日报内容等。而和业务紧密关联的知识库内容未必能达到很好的分词效果, 因为有些词在词库中并没有,因此单纯的部署发布后,对于特定词的查询可能无法达到既定的目标要求。

例如:有一条知识库记录的标题为:时代花世界的联系方式什么?我们可能想根据“时代”、“花世界”进行搜索查询,但是默认情况下IK分词无法把“花世界”这样的结果分出来,就造成查询效果不佳的情况。同样的,我们可能不需要“什么”这样的词,但是Ik默认会把他分出来,此时可以通过配置停用词字典来过滤掉不需要的词,增加分词准确性和搜索的精准度。

IK分词支持自定义维护字典和停用词字典的功能,具体操作可以参考部署手册中的说明,对不同项目中不同业务情况下的知识库信息进行关键词库和停用词库的配置。

7.清空solr数据

在浏览中输入:http://129.204.91.167:8007/solr/index.html ,在左侧菜单,选择core1->Documents,然后选择/update,type选择xml,输入一下内容:

<delete><query>*:*</query></delete>
<commit/>

然后执行就完成清空操作。具体如下图所示:

8.手工同步数据

在左侧菜单中,选择core1->Dataimport,然后选择full-import,Entity选择wiki,然后点击Execute,等Refresh Status 变色后,点击刷新,就可以从右侧看到导入的信息。具体如下图所示:

9.参考文献

【1】solr全文检索原理解释非常好的博文

【2】solr和Mysql查询效率对比的博文

【3】solr5.5自动同步mysql数据非常的博文

【4】非常好的solr部署安装入门博文

猜你喜欢

转载自blog.csdn.net/liangcha007/article/details/86063393
今日推荐