1. 程式人生 > >Centos7下tomcat單機部署Solr7.3

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":"我是被修改的備註"}

再次查詢一下,資料已經被修改