solr5.5之從資料庫中匯入資料並建立索引
前面已經介紹了solr-5.5.0的安裝與部署,接下來我將分享solr-5.5.0資料匯入之從資料庫中匯入資料並建立索引的例子。由於本人也是剛剛接觸solr,不足之處,請大家多多見諒。solr和lucene版本更新太快了,版本之間的差異十分大。比如之前的版本中,在core中使用schema.xml作為根描述檔案,在solr5.5中使用的是叫做managed-schema作為描述檔案。這個本人在這個問題上困擾很久,因為之前的資料都有一個叫做schema.xml的檔案,並且在新建core的時候solr管理介面也會提示需要這麼一個檔案。在這裡我已經認為你安裝好了solr如果還有不清楚的可以參考文章:“solr5.5.0在CenOS上的安裝與配置”
1. 新建一個數據表,這裡我選擇的是mysql資料庫,具體如何安裝我這裡就不說了,具體程式碼如下。這裡還需要mysql的驅動包,需要放入到/opt/tomcat6/lib目錄下,或者放到/opt/tomcat6/webapps/solr/WEB-INF/lib目錄下,自行去mysql官網下載jdbc驅動包,在資料匯入的時候需要用到:
mysql> use test
Database changed
#建立一個名為goods的資料表: mysql> create table goods( ID INT(11) PRIMARY KEY, NAME VARCHAR(50), URL VARCHAR(128), PRICE FLOAT, ADDTIME DATETIME); Query OK, 0 rows affected (0.07 sec)
#向該資料表中插入3條記錄: mysql> insert into goods(ID,NAME,URL,PRICE,ADDTIME) values(1,'蘋果','www.baidu.com',4.5,'2016/4/9 16:46:22'); Query OK, 1 row affected (0.06 sec) mysql> insert into goods(ID,NAME,URL,PRICE,ADDTIME) values(2,'香蕉','www.sina.com',2.5,'2016/4/9 16:47:37'); Query OK, 1 row affected (0.00 sec) mysql> insert into goods(ID,NAME,URL,PRICE,ADDTIME) values(3,'香橙','www.google.com',10,'2016/4/9 16:48:37'); Query OK, 1 row affected (0.00 sec) mysql> select * from goods -> ; +----+--------+----------------+-------+---------------------+ | ID | NAME | URL | PRICE | ADDTIME | +----+--------+----------------+-------+---------------------+ | 1 | 蘋果 | www.baidu.com | 4.5 | 2016-04-09 16:46:22 | | 2 | 香蕉 | www.sina.com | 2.5 | 2016-04-09 16:47:37 | | 3 | 香橙 | www.google.com | 10 | 2016-04-09 16:48:37 | +----+--------+----------------+-------+---------------------+ 3 rows in set (0.00 sec)
2. 配置建立core所需的檔案
2.1 進入solrhome,在solrhome檔案下新建一個一個叫做mynode的檔案
進入solrhome,並檢視其檔案結構
[[email protected] /]# cd /opt/tomcat6/solrhome
[[email protected] solrhome]# ls
configsets README.txt solr.xml zoo.cfg
[[email protected] solrhome]# mkdir mynode
[[email protected] solrhome]# ls
configsets mynode README.txt solr.xml zoo.cfg
2.2 在mynode檔案下新建一個conf檔案
[[email protected] solrhome]# mkdir ./mynode/conf
2.3 在solrhome目錄下有一個叫做configsets的檔案,其包含三個子檔案[[email protected] solrhome]# cd configsets
[[email protected] configsets]# ls
basic_configs data_driven_schema_configs sample_techproducts_configs
[[email protected] configsets]# cd data_driven_schema_configs
[[email protected] data_driven_schema_configs]# ls
conf
[[email protected] data_driven_schema_configs]# ls conf
currency.xml lang params.json solrconfig.xml
synonyms.txt elevate.xml managed-schema protwords.txt stopwords.txt
2.4 將/opt/tomcat6/solrhome/configsets/data_driven_schema_configs/conf/conf/目錄下的所有檔案複製到/opt/tomcat6/solrhome/mynode/conf目錄下[[email protected] data_driven_schema_configs]# cp -r ./conf/* ../../mynode/conf/
[[email protected] data_driven_schema_configs]# cd ../../mynode/conf
[[email protected] conf]# ls
currency.xml lang params.json solrconfig.xml
synonyms.txt elevate.xml managed-schema protwords.txt stopwords.txt
將/opt/solr550/example/example-DIH/solr/db/conf/目錄下的admin-extra.html 、admin-extra.menu-bottom.html 、 admin-extra.menu-top.html 三個html檔案複製到 /opt/tomcat6/solrhome/mynode/conf/目錄下
[[email protected] conf]# cp -r /opt/solr550/example/example-DIH/solr/db/conf/admin*.html /opt/tomcat6/solrhome/mynode/conf/
2.5 在solrconfig.xml檔案中新增如下內容:
[[email protected] conf]# vim solrconfig.xml
<requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
data-config.xml檔案是自己制定的資料來源描述檔案,名字可以隨便取2.6 在/opt/tomcat6/solrhome/mynode/conf目錄下新建一個data-config.xml檔案,並新增如下內容:
</pre><pre name="code" class="plain"><dataConfig>
<dataSource name="source1" type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8" password="[email protected]" user="root">
<document>
<entity name="goods" dataSource="source1" query="select * from goods"
deltaImportQuery="select * from goods where ID='${dataimporter.delta.ID}'"
deltaQuery="select ID from goods where ADDTIME>'${dataimporter.last_index_time}'">
<field column="ID" name="id"/>
<field column="PRICE" name="price" />
<field column="NAME" name="name" />
<field column="URL" name="url" />
<field column="ADDTIME" name="addtime" />
</entity>
</document>
</dataSource>
</dataConfig>
注意:
goods是實體名稱
colunm:對應的是資料庫中表欄位名稱
query:就是full-import匯入的查詢語句
deltaQuery:增量查詢語句
deltaImportQuery:delta-import匯入的查詢語句
細心的你會發現url="mysql:jdbc://localhost:3306/test?useUnicode=true &characterEncoding=utf-8",這兒用的&而不用&作為引數的連結符,因為這個會報錯,筆者在這兒困惑了很久,找了很久才找到答案。也就是有人說的使用引數中不能夠使用&的解決辦法。2.7 在managed-schema檔案中新增如下內容:
[[email protected] conf]# vim managed-schema
<field name="name" type="string" indexed="true" stored="true" />
<field name="price" type="float" indexed="true" stored="true" />
<field name="url" type="string" indexed="true" stored="true" />
<field name="addtime" type="date" indexed="true" stored="true" />
2.8 啟動tomcat,並輸入http://127.0.0.1:8080/solr/admin.html,選擇core admin,輸入如下設定:
2.9 設定好之後,點選Add Core按鈕,進行設定,設定成功後,再core Selector選擇剛剛新增的core
選擇剛剛新增的goods實體進行索引操作:我們這兒可以選擇full-import或者delta-import(增量索引),選擇增量索引需要把clean的勾給去掉,不然會清除之前的,增量的索引的初衷是對新增或者修改的記錄重新索引,會追加到原有的索引檔案當中。當我們選擇full-import的時候,最好就是把原有的索引檔案給清空重新索引。
顯示indexing......,正在索引:
索引成功如下如所示:
使用query進行測試,輸入香蕉查出了香蕉和香橙
這裡給大家留了一個坑,就是中文亂碼的問題,當時我在弄的時候出現了這個問題,就是mysql預設的編碼格式是latin1,需要我們修改成utf-8,資料庫在建立的時候也需要指定編碼格式為utf-8,因為本人少有使用命令的方式建立資料庫,所以犯了如下錯誤,具體解決辦法請大家自行摸索:
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
正確的編碼格式:
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+