在第一篇將 SOLR 安裝好後,再來就是要建立一個 SOLR core,這樣你才能建立 index、 Query
在這一篇將會教學如何建立 SOLR core、並且連結 MySQL 來匯入資料及查詢
SOLR 建立 core
使用 SOLR 工具來建立
由於是使用 solr 這個使用者來啟動,所以使用 su solr 的方式來建立
$ su solr -c '/opt/solr/bin/solr create -c shazi.info' Setup new core instance directory: /var/solr/data/shazi.info Creating new core 'shazi.info' using command: http://localhost:8983/solr/admin/cores?action=CREATE&name=test2&instanceDir=shazi.info { "responseHeader":{ "status":0, "QTime":478}, "core":"shazi.info"}
建立好的 core data 會放在 /var/solr/data/shazi.info
SOLR 從 MySQL 匯入資料
Step.1 要從 MySQL 匯入資料首先必須先到 MySQL 官網抓 mysql connector
Step.2 取得 mysql-connector-java-5.1.37.tar.gz 後,把裡面的 mysql-connector-java-5.1.37-bin.jar 提取出來並放到 SOLR 內載入
$ tar zxvf mysql-connector-java-5.1.37.tar.gz #把 mysql-connector-java-5.1.37-bin.jar 丟到 shazi.info 內 $ mkdir /var/solr/data/shazi.info/lib $ mv mysql-connector-java-5.1.37/mysql-connector-java-5.1.37-bin.jar /var/solr/data/shazi.info/lib/
Step.3 把 SOLR 範例 db 匯入設定檔複製到 core conf
$ cp -r /opt/solr/example/example-DIH/solr/db/conf/ /var/solr/data/shazi.info/conf/
Step.4 設定 solrconfig.xml
確認 db config 的名稱為 db-data-config.xml,待會我們要編輯他來設定 mysql connection
加入 mysql connector lib 的位置
$ cd /var/solr/data/shazi.info/conf/ $ vim solrconfig.xml <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">db-data-config.xml</str> </lst> </requestHandler> <!-- 加入以下 lib 位置 --> <lib dir="/opt/solr/dist" regex="solr-dataimporthandler-.*\.jar" /> <lib dir="/var/solr/data/shazi.info/lib" regex=".*\.jar" />
這邊建議可以使用相對路徑以防未來移機,小弟這邊使用絕對路徑是因為分配上的潔癖。
請記住一定要加入 lib 位置確認可以抓到 mysql-connector-java-5.1.37-bin.jar,否則接下來你的設定怎麼樣都抓不到 mysql 資料,前功盡棄。
Step.5 設定 db-data-config.xml
這隻設定檔是有關於設定 MySQL 資料庫位置以及匯入的資訊
$ vim db-data-config.xml <dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.10.10:3306/solr" user="solr_USER" password="solr_PWD" /> <document name ="shazi.info"> <entity name="item" query="SELECT * FROM solr_tables"> <field column="id" name="id" /> <field column="typeid" name="typeid" /> <field column="body" name="body" /> <field column="name" name="name" /> </entity> </document> </dataConfig>
- driver = 使用 mysql 驅動:com.mysql.jdbc.Driver
- url = MYSQL 資料庫位置:jdbc:mysql://192.168.10.10:3306/solr
- user = MYSQL資料庫使用者
- password = MYSQL 資料庫密碼
資料匯入:
- 定義一個匯入項目 “item”
- 要匯入的資訊 “SELECT * FROM solr_tables”
- 定義欄位 “field”,必須要定義才撈的到資料。
Step..6 在 db-data-config.xml 設定好匯入資料後,還必須定義 tables schema。
$ vim schema.xml <?xml version="1.0" ?> <schema name="example core zero" version="1.1"> <!-- schema type 屬性--> <types> <fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/> </types> <!-- schema 定義 --> <field> <field name="_version_" type="long" indexed="true" stored="true"/> <field name="id" type="string" indexed="true" stored="true"/> <field name="type" type="string" indexed="true" stored="true"/> <field name="body" type="long" indexed="true" stored="true"/> <field name="name" type="string" indexed="true" stored="true"/> </field> <!-- primary key --> <uniqueKey>id</uniqueKey> <!-- 無定義欄位時預設搜尋項目 --> <defaultSearchField>name</defaultSearchField> <!-- 空白串接使用 OR 或是 AND --> <solrQueryParser defaultOperator="OR"/> </schema>
上述是一個標準 schema 的寫入方式,可以按照需求加入,solr 內建還有許多 schema type 可以從範例檔抓取新增。
如果你的 Step.5 , 6 都完成後,就可以到 SOLR Cloud 進行匯入測試
到 Dataimport 選好 Entity 為剛剛建立的 “item”,然後執行匯入”Exexute”
執行後 SOLR 不會自動更新狀態(不貼心),必須手動執行 “Refresh Status” 就可以看到匯入成功,並且有多少筆匯入成功
既然匯入成功了我們就到 Query 來驗證一下匯入的資料是否正確,有找到資料就代表匯入完成囉!!
現在支援 json、python、csv、xml、php、ruby,對於前端已經越來越友善了