基於Centos7安裝Solr7.4,並匯入資料教程
環境:centos7、JDK1.8、solr 自帶Jetty啟動
一、安裝JDK1.8環境
1、下載JDK
jdk-8u172-linux-x64.rpm
下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
2、安裝JDK
rpm -ivh jdk-8u131-linux-x64.rpm
3、配置JDK環境變數
vim /etc/profile
在最後面加上下面這段
JAVA_HOME=/usr/java/jdk1.8.0_172-amd64
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME
4、檢查是否完成安裝
java -version
javac
二、安裝Solr
1、下載solr
solr-7.4.0.tgz
下載地址:http://mirrors.hust.edu.cn/apache/lucene/solr/7.4.0/solr-7.4.0.tgz
2、建立目錄
[[email protected] /]# mkdir /chowdate
把solr-7.4.0.tgz複製到目錄
[[email protected] /]# tar -zxvf solr-7.4.0.tgz
3、啟動Solr
localhost bin]# /chowdate/solr-7.4.0/bin/solr start -forc
4、開啟頁面
5、啟動到開啟頁面過程可能會出現的問題
如果執行./solr start -force 命令的時候會警告你係統檔案開啟數的問題,可以這樣解決。修改完後要重啟系統。
1. 修改 /etc/sysctl.conf 檔案,在最後一行新增
fs.file-max = 6553560
2. 修改 /etc/security/limits.conf 檔案,在最後一行新增
* soft nproc 65535 //注意,前面的星號也需要
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
如果出現solr安裝成功,但是外界訪問不到的問題,請檢查防火牆是否關閉,或者8983埠是否允許開放!
關閉防火牆的命令:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啟動
firewall-cmd --state #檢視預設防火牆狀態(關閉後顯示notrunning,開啟後顯示running)
開啟埠的命令:
firewall-cmd --zone=public --add-port=8983/tcp --permanent (--permanent永久生效,沒有此引數重啟後失效)
三、新增自己的solr core
1、建立core目錄
在/chowdate/solr-7.4.0/server/solr目錄下建立new_core目錄(名字自己定)
2、複製配置檔案
複製/chowdate/solr-7.4.0/server/solr/configsets/_default下的conf資料夾到/chowdate/solr-7.4.0/server/solr/new_core/下。
3、新增core
在頁面新增new_core(必須先做上面1、2步,不然會提示報錯)。
新增成功後/chowdate/solr-7.4.0/server/solr/new_core/下會多兩個東西。
core.properties檔案、data目錄
四、匯入資料庫中的資料到Solr中
1、建立data-config.xml檔案
在/chowdate/solr-7.4.0/server/solr/new_core/conf目錄下建立一個檔案data-config.xml,與solrconfig.xml同級
2、修改solrconfig.xml檔案
修改/chowdate/solr-7.4.0/server/solr/new_core/conf/solrconfig.xml檔案
在<requestHandler name="/select" class="solr.SearchHandler">上放增加以下這段程式碼。
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
其中<str name="config"></str>裡的內容就是我們在上一步建立的data-config.xml檔案,將它們關聯起來。
3、修改data-config.xml檔案
接下來我們開啟data-config.xml檔案,配置相關的資料庫屬性,即我們要匯入那張表的哪些欄位,內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource name="source1" type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://10.10.9.103:3306/auth-cas"
user="root"
password="****"
batchSize="-1" />
<document>
<entity name="user" dataSource="source1"
query="SELECT uid,user_code,account,password,user_name,gender,last_login_time,update_time FROM uap_tb_gmvcs_user">
<field column='uid' name='uid' />
<field column='user_code' name='user_code' />
<field column='account' name='account' />
<field column='password' name='password' />
<field column='user_name' name='user_name' />
<field column='gender' name='gender' />
<field column='last_login_time' name='last_login_time' />
<field column='update_time' name='update_time' />
</entity>
</document>
</dataConfig>
dataSource 中,url是你要訪問的資料庫路徑,我這裡指定到我的auth-cas 資料庫。user是使用者名稱,password是你的資料庫密碼。
query是一個sql語句,你需要匯入哪張表的哪些欄位,查就行了。然後<field>標籤中的column屬性是你SQL語句中查詢的欄位,跟資料庫中對應;name屬性是你給它起的一個別名,應該是必須指定的(本人沒試過不指定的結果),至於name屬性是幹嘛的,繼續往下操作,自然會明白。有多個查詢欄位就需要有多個<field>標籤,每一個<field>標籤對應一個欄位。
document配置資料庫查詢語句與managed_schema域的對應關係。目的是,在core匯入資料的時候,會先通過該配置資訊連結到資料庫通過查詢語句把資料查詢出來,通過資料庫欄位與managed_schema域關聯關係建立索引
4、修改managed-schema檔案
修改/chowdate/solr-7.4.0/server/solr/new_core/conf/managed-schema檔案,將剛才在data-config.xml中配置的<field>標籤新增進來。
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<!-- docValues are enabled by default for long type so we don't need to index the version field -->
<field name="_version_" type="plong" indexed="false" stored="false"/>
<field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
<field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/>
<!-- 上面是原有的的欄位 -->
<!-- 自己的匯入的欄位 -->
<field name="uid" type="string" indexed="true" stored="true" />
<field name="user_code" type="string" indexed="true" stored="true" />
<field name="account" type="string" indexed="true" stored="true" />
<field name="password" type="string" indexed="true" stored="true" />
<field name="user_name" type="string" indexed="true" stored="true" />
<field name="gender" type="string" indexed="true" stored="true" />
<field name="last_login_time" type="pdate" indexed="true" stored="true" />
<field name="update_time" type="pdate" indexed="true" stored="true" />
這裡<field>裡的name屬性值,就是我們剛才在data-config.xml中<field>標籤的name屬性值,這是name屬性的第一個用途,關聯起來。
name:是這個域的名稱,在整個managed_schema檔案裡面需要唯一,不能重複,這裡定義成跟資料庫表字段的名稱,方便使用。當然,也可以定義成其他名字。
type:是表示這個欄位的型別是什麼,string是字串型別,int是整形資料型別,date是時間型別,相當於資料庫裡面的timestamp。
indexed:表示是否索引,索引的話就能查詢到,否則,搜尋的時候,不會出現。
stored:表示是否儲存到索引庫裡面。
required:是否必須
multiValued:是否多值,比如商品資訊中,一個商品有多張圖片,一個Field想儲存多個值的話,必須將multiValued設定為true
5、下載連線資料庫和匯入資料的jar包
現在涉及到資料庫了,肯定需要依賴一些jar包,下載三個jar包 下載地址:http://mvnrepository.com/
mysql-connector-java-8.0.11.jar
solr-dataimporthandler-7.4.0.jar
solr-dataimporthandler-extras-7.4.0.jar
三個jar包 放到/chowdate/solr-7.4.0/server/solr-webapp/webapp/WEB-INF/lib 目錄下
然後開啟/chowdate/solr-7.4.0/server/solr/new_core/conf/solrconfig.xml,引用上面提到的jar包,如下。
<!-- mysql匯入增加的包開始-->
<lib dir="${solr.install.dir:../../../..}/dist/" regex="mysql-connector-java-.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
<!-- mysql匯入增加的包結束-->
關閉然後重啟 ./bin/solr stop -all ./bin/solr start -force
6、匯入資料
再次訪問我們剛才的頁面,在左側找到我們部署好的new_core工程,點選Dataimport,再選擇full-import(全部匯入),點選Execute,出現下面的頁面,證明這張表的資料已經匯入進來了。
6、查詢資料