Solr配置導入MySQL數據

1. 編寫配置文件前端

1)編寫data-config-comment.xml,此文件用於描述如何查詢MySQL數據,如何將數據變換導入索引。java

假設有一個數據庫叫mooc,其中有個表叫comment,表明學生的評論mysql

其中:sql

  • entity對應MySQL數據庫表中的一行shell

  • query對應全庫導入的SQL查詢數據庫

  • queryImportQuery 對應增量導入的SQL查詢
    apache

  • deltaQuery對應增量導入獲取最新修改的行ID,這些ID用於queryImportQuery,SQL的含義中json

DATE(updatetime) >= '${dih.last_index_time}' OR DATE(writetime) >= '${dih.last_index_time}

表示comment的更新時間updatetime,或者comment的寫入時間writetime比上一次的導入時間$(dih.last_index_time)還大。後端

<dataConfig>
   <dataSource type="JdbcDataSource" 
              driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost/mooc" 
              user="root" 
              password="root"/>
   <document>
    <entity name="comment" 
	query="SELECT id, DATE_FORMAT(writetime, '%Y-%m-%dT%TZ') as 'writetime', title from comment"
	deltaImportQuery="SELECT id, DATE_FORMAT(writetime, '%Y-%m-%dT%TZ') as 'writetime', title from comment where id='${dih.delta.id}'"
	deltaQuery="SELECT id FROM comment WHERE DATE(updatetime) >= '${dih.last_index_time}' OR DATE(writetime) >= '${dih.last_index_time}'">       
	   <field column="id" name="id"/>	  
	   <field column="writetime" name="writetime"/>
	   <field column="title" name="title"/>       	
    </entity>   	
  </document>
</dataConfig>

若是field裏面有HTML標籤,則能夠使用<entity transformer="HTMLStripTransformer" 來刪除。這使用了Solr DataImportHandler的Transformer工具,能夠定義多個鏈式transformer,彼此之間用逗號隔開。瀏覽器

2)假設要建立一個名爲mooc的solr核,在其conf目錄中的schema.xml文件中編寫fields,加入id,writetime,title,其中text_cn,須要使用我上一則博客寫的中文分詞插件。

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />    
<field name="writetime" type="tdate" indexed="true" stored="true"/>
<field name="title" type="text_cn" indexed="true" stored="true"/>


3) 配置Solr的solrconfig.xml

D:\libs\solr-4.10.2\example\solr\mooc\conf目錄中,建立data-config-comment.xml

在solrconfig.xml中建立數據導入handler用來導入comment表,以下編寫,其中的data-config-comment.xml便是第1步寫的

<requestHandler name="/dataimportcomment" class="org.apache.solr.handler.dataimport.DataImportHandler"> 
<lst name="defaults"> 
<str name="config">data-config-comment.xml</str>    
</lst> 
</requestHandler>


2.配置使用到的JAVA庫文件

建立D:\libs\solr-4.10.2\example\solr\mooc\lib,拷貝solr-dataimporthandler-4.10.2和mysql-connector-java-5.1.26-bin到此,這兩個庫用於導入和查詢數據庫


3.啓動Solr

進入solr的example目錄

java -jar start.jar


3.導入爲索引數據

在瀏覽器運行以下命令作全庫導入,表示將數據,導入到Solr核mooc中

http://localhost:8983/solr/mooc/dataimportcomment?command=full-import&commit=y

若是帶clean=false參數,則表示不刪除原數據


增量導入

http://localhost:8983/solr/mooc/dataimportcomment?command=delta-import


4.刪除索引文件

編寫一個XML文件,內容爲

<delete><query>*:*</query></delete>

執行命令

java -Durl=http://localhost:8983/solr/mooc/update  -jar post.jar delete_docs.xml


5. 查詢數據

1)使用Solr的edismax query,查詢「的」字,返回ID,title,和writetime,以json格式,能夠改爲wt=xml,表示使用xml格式,但爲了程序處理方便,用json

http://localhost:8983/solr/mooc/select?q=的&wt=json&indent=true&defType=edismax&qf=title&omitHeader=true&fl=id,title,writetime

2)精簡的,只查出來ID

http://localhost:8983/solr/mooc/select?q=的&wt=json&defType=edismax&qf=title&omitHeader=true&fl=id

omitHeader=true表示取出數據信息

3)查詢日期,使用以下參數

到目前爲止:

fq=writetime:[* TO NOW]

從2011年8月19號到2014年8月19號:

fq=writetime:[2011-08-19T11:50:23Z TO 2014-08-19T11:50:23Z]

2011年8月19號之後:

fq=writetime:[2011-08-19T11:50:23Z TO *]

4)高亮顯示關鍵字

http://localhost:8983/solr/mooc/select?q=好的&wt=json&indent=true&defType=edismax&qf=title&omitHeader=true&fl=id,title,writetime&hl=true

hl=true表示開啓高亮顯示


6.前端搜索操做流程

前端java script 發請求給後端的servlet,servlet向搜索引擎發出查詢請求,返回結果給前端


7.定時增量導入數據

1)先寫導入腳本sh_delta_import.sh

#!/bin/sh
curl "http://localhost:8983/solr/mooc/dataimportcomment?command=delta-import"
curl "http://localhost:8983/solr/mooc/dataimportcomment?command=delta-import"

重複一次,是由於Solr可能會在第一次返回一個警告,再執行一次就導入了。

2)配置/etc/crontab,添加一行,表示天天4點執行

00 04 * * * root /mooc/solr-4.10.2/example/sh_delta_import.sh

3)重啓定時程序

/etc/rc.d/init.d/crond restart
相關文章
相關標籤/搜索