Solr7.4 Linux 安裝及資料匯入
solr 讀音應該是叫 “so lar”
之前寫過一篇介紹solr的文章https://zhangdianlei.github.io/2018/09/11/Apache-Solr/ ,這裡就不再囉嗦solr的事情了。今天搞了一天的solr,現在記錄一下
solr安裝及使用:
- Linux環境下安裝
- 新增環境變數
- 啟動solr,簡單瞭解solr
- 新建Core
- 從資料庫匯入資料
- 資料查詢
下面詳解介紹每一部分。
Linux環境下安裝solr
要求: 電腦上已經裝了jdk8+
下載:建一個工作資料夾,執行下載命令:
wget http://mirrors.shuosc.org/apache/lucene/solr/7.4.0/solr-7.4.0.tgz
解壓安裝:
tar -zxvf solr-7.4.0.tgz
新增環境變數
將solr新增到環境變數,可以快速的啟動、重啟、關閉等,非常有必要。
編輯檔案:
vim /etc/profile
下面是我的配置:
export JAVA_HOME=/root/software/jdk1.8.0_181
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
# solr environment
export SOLR_INSTALL_HOME=/root/solr-7.4.0
export PATH=$SOLR_INSTALL_HOME/bin:$PATH
然後執行:
source /etc/profile
使得配置檔案生效
然後可以執行以下命令驗證配置成功:
solr start
啟動solr,簡單瞭解solr
啟動、重啟、關閉命令:
solr start
solr restart
solr stop
有時系統因安全問題考慮,可能需要在命令後加上-force
引數
solr啟動後,訪問 http://ip:8983/solr
之後,將訪問web管理介面:
新建Core
每個人新建Core的方法,和配置方法都不一樣,在此,僅記錄我的建立和配置方法。
先在 Core Admin --> Add Core
~SolrDir/server/solr/configsets/_default/conf
下面,假設當前目錄為solr根資料夾下,新的Core名字為new_core
,執行:
cp -r server/solr/configsets/_default/conf server/solr/new_core
新建Core
完成!
匯入資料庫資料
在上一步匯入的Conf目錄下,修改以下配置:
在 solrconfig.xml
下新增以下配置,新增位置大約在 680行,SearchHandler
配置上面:
<!-- Request Handlers
http://wiki.apache.org/solr/SolrRequestHandler
Incoming queries will be dispatched to a specific handler by name
based on the path specified in the request.
If a Request Handler is declared with startup="lazy", then it will
not be initialized until the first request that uses it.
-->
<!-- add property -->
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
<!-- SearchHandler
http://wiki.apache.org/solr/SearchHandler
For processing Search Queries, the primary Request Handler
provided with Solr is "SearchHandler" It delegates to a sequent
of SearchComponents (see below) and supports distributed
queries across multiple shards
-->
data-config.xml
是引用的配置檔案,需要新建這個配置檔案。在linux下,直接用vim新建即可,vim data-config.xml
,然後 wq
儲存退出即可。
該檔案的配置如下,連線的是postgresql
,如果是連mysql
的話,需要改一下driver即可(com.mysql.jdbc.Driver
):
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource name="source"
type="JdbcDataSource"
driver="org.postgresql.Driver"
url="jdbc:postgresql://localhost:3306/test_db"
user="root"
password="abc123"
/>
<document>
<entity name="person"
pk="id"
dataSource="source"
query="select * from person"
deltaImportQuery="select * from person where id = '${dih.delta.id}'"
deltaQuery="select id from person where update_date > '${dataimporter.last_index_time}' and status_flag = 'success'">
<field column="id" name="id"/>
<field column="update_date" name="update_date"/>
</entity>
</document>
</dataConfig>
這裡,需要新增用到的驅動包,用到什麼驅動下載什麼,可以從mvn庫下載(https://mvnrepository.com/),將資料連線驅動包下載之後,放到solr\server\solr-webapp\webapp\WEB-INF\lib
下,然後將solr{home}\dist目錄下的:solr-dataimporthandler-7.4.0.jar和solr-dataimporthandler-extras-7.4.0.jar這兩個jar包拷貝到 solr\server\solr-webapp\webapp\WEB-INF\lib下。
簡單說一下這三個query的作用:
query: 在全量匯入時使用
**deltaImportQuery:**在增量匯入時執行,其中的id來自於 deltaQuery 的查詢結果。
在這之後,需要配置managed-schema
檔案,與資料庫進行對映,在117行附近,新增與資料庫的對映,具體新增規則,不詳細寫了。
<field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
<field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/>
<!-- add propertity -->
<field name="invoice_type" type="text_ik" indexed="true" stored="true" />
<field name="invoice_code" type="string" indexed="true" stored="true" />
<field name="invoice_num" type="string" indexed="true" stored="true" />
為了查詢的效果,需要再配一下中文分詞器,將下面配置放到其中,位置大約在358行:
<fieldType name="text_gen_sort" class="solr.SortableTextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<!-- add propertity -->
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" useSmart="false"
class="org.wltea.analyzer.lucene.IKAnalyzer" />
<analyzer type="query" useSmart="true"
class="org.wltea.analyzer.lucene.IKAnalyzer" />
</fieldType>