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,並查看其文件結構
[root@localhost /]# cd /opt/tomcat6/solrhome
[root@localhost solrhome]# ls
configsets  README.txt  solr.xml  zoo.cfg
[root@localhost solrhome]# mkdir mynode
[root@localhost solrhome]# ls
configsets  mynode  README.txt  solr.xml  zoo.cfg

2.2 在mynode文件下新建一個conf文件

[root@localhost solrhome]# mkdir ./mynode/conf


2.3 在solrhome目錄下有一個叫做configsets的文件,其包含三個子文件
[root@localhost solrhome]# cd configsets
[root@localhost configsets]# ls
basic_configs  data_driven_schema_configs  sample_techproducts_configs
[root@localhost configsets]# cd data_driven_schema_configs
[root@localhost data_driven_schema_configs]# ls
conf
[root@localhost 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目錄下

[root@localhost data_driven_schema_configs]# cp -r ./conf/* ../../mynode/conf/
[root@localhost data_driven_schema_configs]# cd ../../mynode/conf
[root@localhost 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/目錄下

[root@localhost conf]# cp -r /opt/solr550/example/example-DIH/solr/db/conf/admin*.html /opt/tomcat6/solrhome/mynode/conf/



2.5 在solrconfig.xml文件中添加如下內容:

[root@localhost 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="znp@mm" 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 &amp;characterEncoding=utf-8",這兒用的&amp;而不用&作爲參數的鏈接符,因爲這個會報錯,筆者在這兒困惑了很久,找了很久才找到答案。也就是有人說的使用參數中不能夠使用&的解決辦法。

2.7 在managed-schema文件中添加如下內容:

[root@localhost 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/ |
+--------------------------+----------------------------+






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章