Centos7下tomcat单机部署Solr7.3

     本章重点介绍CentOS7 下部署Solr7 ,添加核心Core配置,Dataimport导入,中文分词的相关操作。

一、准备工作

    演示环境是在虚拟机下安装的CentOS7、java JDK8、apache-tomcat-8.5.29。

    在CentOS7 下安装jdk8以及tomcat8.5 的安装方法可以搜索相关教程,这里不再赘述。

    注意:solr6.0以上,官方建议使用jdk8,tomcat8。

二、下载 solr-7.3.0

    官网 http://www.apache.org/dyn/closer.lua/lucene/solr/7.3.0 找合适的镜像下载solr ,并上传到虚拟机。

    也可以使用wget 直接下载 

复制代码

#cd /usr/local
# wget http://mirrors.shu.edu.cn/apache/lucene/solr/7.3.0/solr-7.3.0.zip

  

  看到如上图所示

  等待几分钟,下载完成后在当前目录(/usr/local)下解压

#unzip solr-7.3.0.zip
#cd solr-7.3.0

复制代码

    注:若提示unzip command not found ,请先安装zip、unzip命令,再解压。

#yum install -y unzip zip  

三、与tomcat结合部署Solr7

  1.进入solr7解压后的目录后,复制并重命名solr-7.3.0目录里的server/solr-webapp/webapp文件夹到tomcat的webapps目录为solr7。

    演示环境的tomcat 安装目录为/usr/local/java/apache-tomcat-8.5.29

# cd solr-7.3.0
#  cp -r server/solr-webapp/webapp  /usr/local/java/apache-tomcat-8.5.29/webapps/solr7 

  

      

 2.将需要的jar包,复制到部署的solr7 的WEB-INF/lib/ 下

    将server/lib/ext/下的所有jar复制到 /usr/local/java/apache-tomcat-8.5.29/webapps/solr7/WEB-INF/lib/下

# cd server/lib/ext/
#  ll
#  cp  *  /usr/local/java/apache-tomcat-8.5.29/webapps/solr7/WEB-INF/lib/

  

   将server/lib/metrics* 开头的5个jar复制到 /usr/local/java/apache-tomcat-8.5.29/webapps/solr7/WEB-INF/lib/下

# cd ..
# ll
# cp metrics-*  /usr/local/java/apache-tomcat-8.5.29/webapps/solr7/WEB-INF/lib/

  

3.复制log4j配置文件

  把server/resources/目录下的log4j.properties,复制到刚才部署的solr7的WEB-INF/,要创建一个classes的目录

# mkdir /usr/local/java/apache-tomcat-8.5.29/webapps/solr7/WEB-INF/classes
# cp ../resources/log4j.properties /usr/local/java/apache-tomcat-8.5.29/webapps/solr7/WEB-INF/classes

     

4.创建solr home

  复制并重命名solr-7.3.0/servier/solr为/usr/local/solr7home

# cd  ../../
# cp -r server/solr  /usr/local/solr7home
# ls /usr/local/solr7home

  

5.将tomcat/webapps下的solr7与新建的solr7home关联

  a.需要修改tomcat里solr7/WEB-INF/web.xml文件

# vim  /usr/local/java/apache-tomcat-8.5.29/webapps/solr7/WEB-INF/web.xml

 

  b.找到名称为solr/home的env-entry(如下图所示),打开注释,修改env-entry-value值为新建的solr7home

     

 c.然后到最下方,将这一段注释掉,不然会报403错误,完成后保存退出

     

6.启动tomcat

# /usr/local/java/apache-tomcat-8.5.29/bin/start.sh

  在电脑上访问下服务器的solr服务,演示环境的ip为192.168.1.220

  访问http://192.168.1.220:8080/solr7/index.html,出现如下页面表示solr服务搭建好了。

     

四、添加solr核心Core配置

    在管理页面,点击Core Admin,选择AddCore,添加核心

         

     name:自定义的名字,建议和instanceDir保持一致

     instanceDir: solrhome目录下的实例类目

     dataDir:默认填data即可

     config:指定配置文件,new_core/conf/solrconfig.xml

     schema:指定schema.xml文件,new_core/conf/schema文件(实际上是managed-schema文件)

    注意:红色框内的内容,instanceDir and dataDir need to exist before you can create the core

    要求在创建solr核心时,instanceDir实例目录在sold home 中存在

    如果instanceDir实例目录不存在,点击添加会有如下提示,但会在solr/home中多一个instanceDir实例目录。

    

a.将solr7home/configsets/sample_techproducts_configs/目录下的conf 拷贝到 mycore 目录下,目录结构:mycore/conf/

b.将solr-7.3.0安装目录下的contrib目录,dist目录拷贝到solr7home目录中

复制代码

# cd /usr/local/solr7home/
# mv new_core micro
# ll
# cp -r configsets/sample_techproducts_configs/conf  mycore/
# ll
# cp -r /usr/local/solr-7.3.0/contrib ./
# cp -r /usr/loacl/solr-7.3.0/dist ./
# ll

复制代码

c.修改mycore/config/solrconfig.xml

  将文件中<lib dir="${solr.install.dir:../../../..}.." 替换为 <lib dir=“/usr/local/solr7home/…."

# vim mycore/config/solrconfig.xml

  

  替换后结果如下:

       

  d.刷新页面,点击Core Admin 添加Core,instanceDir就是刚才配置的目录mycore,出现下图所示表示solr核心创建成功

      

五、Dataimport(导入数据)

     点击Dataimport 时,出现 The solrconfig.xml file for this index does not have an operational DataImportHandler defined!

     解决如下:

  a.复制sorl7home/dist/solr-dataimporthandler*.jar和mysql的jdbc驱动mysql-connector-java-5.1.42.jar 到tomcat的webapps/solr7/WEB-INF/lib/下

# ll dist/
# cp -r dist/solr-dataimporthandler-*  /usr/local/java/apache-tomcat-8.5.29/webapps/solr7/WEB-INF/lib/
# vim mycore/config/solrconfig.xml

  

 b.在mycore/config/solrconfig.xml添加DataImportHandler

     

 c.在mycore/conf/ 目录下创建data-config.xml(数据库配置和对应的字段)

     

   目录结构如下:

     

 d.重启tomcat,再次访问,如果出现下图内容则说明配置成功

      

  e.添加数据库中对应的Field(注意solr已经存在的field 不需要添加 ,具体可在managed-schema中查看已有的field),

     然后数据才能完整的导入。否则导入数据进行query 查询的时候只有id ,_version_两个字段。

       

 f. 数据导入

   Command:full_import:全量导入;delta_import:增量导入。

   Clean:在索引开始构建之前是否删除之前的索引,默认为true

   Commit:在索引完成之后是否提交。默认为true

   Execute:执行导入

   Refresh Status:刷新后才能看到数据发生了变化(点一次刷新一次)

   选择 全量导入,Execute执行,Refresh Status刷新查看状态,其他都选默认即可。

g.增量导入

mycore/config目录下,有一个dataimport.properties文件,内容如下;

#Thu Nov 01 19:56:31 CST 2018
last_index_time=2018-11-01 19\:56\:31
SYSROLE.last_index_time=2018-11-01 19\:56\:31

mycore/config/data-config.xml文件中的配置如下:

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"   
            driver="com.mysql.jdbc.Driver"   
            url="jdbc:mysql://x.x.x.x:3306/jeesite"   
            user="root"   
            password="123456"/>
<document>
        <entity name="SYSROLE" pk="id" query="SELECT id,name,data_scope,enname,update_date FROM sys_role "
        deltaQuery="SELECT id FROM sys_role where update_date > '${dataimporter.last_index_time}'"  
        >
                <field column="id" name="ID"/>
                <field column="name" name="NAME"/>
                <field column="data_scope" name="DATASCOPE"/>
                <field column="enname" name="ENNAME"/>
                <field column="update_date" name="updateDate"/>
        </entity>
</document>
</dataConfig>

将数据跟新,同时update_date时间大于dataimport.properties文件中的时间,就可以看到增量跟新。

六、自带中文分词

   1.将solr 自带的中文分词jar,从solr-7.3.0\contrib\analysis-extras\lucene-libs下的lucene-analyzers-smartcn-7.3.0.jar复制到,tomcat的webapps/solr7/WEB-INF/lib/ 下,编辑mycore/conf/managed-schema

# cd  /usr/local/solr7home/   
# cp contrib/analysis-extras/lucene-libs/lucene-analyzers-smartcn-7.3.0.jar  /usr/local/java/apache-tomcat-8.5.29/webapps/solr7/WEB-INF/lib
# vim mycore/confg/managed-schema

  

  2.在mycore/confg/managed-schema 添加如下内容

    <!--text  Chinese -->

    <fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100">

      <analyzer type="index">

        <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>

      </analyzer>

      <analyzer type="query">

        <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>

      </analyzer>

    </fieldType>

     

   3.重启tomcat

      

七.IK分词

1.先下载solr7版本的ik分词器,下载地址:http://search.maven.org/#search%7Cga%7C1%7Ccom.github.magese
    分词器GitHub源码地址:https://github.com/magese/ik-analyzer-solr7

    GitHub上有分词器的使用方式

   

    将下载好的jar包放入tomcat中的solr7/WEB-INF/lib目录中
2.编辑mycore/conf/managed-schema文件,配置文件中加入如下代码

  <fieldType name="text_ik" class="solr.TextField">
    <analyzer type="index">
      <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" conf="ik.conf" useSmart="false"/>
      <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="query">
      <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" conf="ik.conf" useSmart="true"/>
      <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
  </fieldType>

3.将IKAnalyzer.cfg.xml,ext.dic自定义或搜狗的扩展词库,stopword.dic放在solr7项目下的WEB-INF\classes目录中去。

IKAnalyzer.cfg.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
<properties>  
    <comment>IK Analyzer 扩展配置</comment>
    <!--用户可以在这里配置自己的扩展字典 -->
    <entry key="ext_dict">ext.dic;</entry>
    
    <!--用户可以在这里配置自己的扩展停止词字典-->
    <entry key="ext_stopwords">stopword.dic;</entry>
    
</properties>

stopword.dic代码如下:

of
on
or
such
that
the
their
then
there
these
they
this
to
was
will
with
,
?











人民
末##末

~
!
.
:
"
'
(
)
*
A

社会主义
--
..
>>
 [
 ]

<
>
/
\
|
-
_
+
=
&
^
%
#
@
`
;
$


——


·
...




0
1
2
3
4
5
6
7
8
9

























︿









啊哈

ext.dic代码如下:

诛仙
诛仙2
梦幻诛仙
梦幻诛仙2

4.配置完成后再次重启一次solr服务,再次刷新http://localhost:8080/solr/index.html页面

关于该IK分词器更多的使用方法可以看GitHub上的使用说明,该分词器同时添加了动态加载词典的方法!

    GitHub:https://github.com/magese/ik-analyzer-solr7

八。界面添加,更新,查询数据

添加数据
选择Order

点击Documents

在右侧Document(s)文本域输入要添加对应格式的数据

我在这里添加了一段json数据

{"id":12345, "remark":"这是备注"}

点击 Submit Document  右侧信息显示成功Status:success

点击左侧的Query查询一下我们刚刚添加的数据,已经插入成功

关于id字段,solr默认添加id字段作为主键,solr会判断提交数据中的id值是否存在,不存在保存数据;存在则更新数据

我们来测试一下,修改json数据,id不变,修改remark值

{"id":12345, "remark":"我是被修改的备注"}

再次查询一下,数据已经被修改

猜你喜欢

转载自blog.csdn.net/java20150326/article/details/81322595