1. 程式人生 > >Solr配置及使用

Solr配置及使用

Solr是一個獨立的企業級搜尋應用伺服器,它對外提供類似於Web-serviceAPI介面。使用者可以通過http請求,向搜尋引擎伺服器提交一定格式的XML檔案,生成索引;也可以通過Http Get操作提出查詢請求,並得到XML格式的返回結果。

Solr是一個高效能,採用Java5開發,基於Lucene的全文搜尋伺服器。同時對其進行了擴充套件,提供了比Lucene更為豐富的查詢語言,同時實現了可配置、可擴充套件並對查詢效能進行了優化,並且提供了一個完善的功能管理介面,是一款非常優秀的全文搜尋引擎


下面來配置Solr全文索引:

首先到網上搜索並下載solr,給大家準備了網站http://mirrors.hust.edu.cn/apache/lucene/solr/

,就不用那麼麻煩的找,下載完解壓后里面的目錄結構是這樣的:

然後按開始鍵輸入cmd進入DOS視窗

在DOS窗口裡啟動Solr服務:首先進入到你解壓的Solr檔案裡的bin目錄(cd的意思是進入)

然後接著輸入啟動命令:

solr.cmd start

然後啟動成功顯示如下圖,中間等待一會就好了

開啟瀏覽器(推薦谷歌瀏覽器)在位址列輸入http://localhost:8983/(localhost指本機主機名,8983指Solr埠號,預設是8983),啟動服務成功顯示的頁面

點選左側導航的Core Admin 點選Add Core 

,下圖畫線name和instanceDir自己設定相關的名稱,然後點選新增

是不是報一行紅色的錯誤呢?不要慌張,找到你解壓好的Solr檔案—>server—>solr就可以看到你新新增的core了

雙擊開啟後會發現裡面是空的,這就是報錯的原因,缺少conf檔案,這時候進入configsets—>_default檔案下把conf複製到你新新增的core裡面,注意看路徑

然後回到瀏覽器再點一次Add Core,重新整理一下就可以了(有些可能還會跳一個錯誤出來,不用理它,直接F5重新整理),這就是新新增的core

回到新新增的core目錄裡,會發現多了兩個檔案,這才是正確新增core

接下來就要修改配置檔案了,要修改的配置檔案都在conf裡面

我們需要新增中文分詞器,因為Solr作為搜尋應用伺服器,在使用過程中,不可避免的要使用中文搜尋。把中文分詞jar包加入solrconfig.xml檔案中,放在其他的<lib/>標籤後面

<lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs" regex="lucene-analyzers-smartcn-\d.*\.jar" />

然後到managed-schema檔案中設定增加fieldType型別程式碼,一樣放在其他的<fieldType>型別後面

<fieldType name="text_ik_zd" class="solr.TextField" positionIncrementGap="100">	<analyzer type="index">			
               <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>	</analyzer>		
         <analyzer type="query">			
              <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>	 </analyzer>	
</fieldType>

接下來配置匯入資料的jar包,可以將資料庫的資料匯入Solr搜尋引擎,把匯入資料jar包加入solrconfig.xml中,放在其他的<lib/>標籤後面

<lib dir="${solr.install.dir:../../../..}/dist" regex="solr-dataimporthandler-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist" regex="solr-dataimporthandler-extras-\d.*\.jar" />

然後將連線資料庫的jar包放到server\solr-webapp\webapp\WEB-INF\lib目錄下,我用的是mysql資料庫

然後繼續在solrconfig.xml中加入requestHandler型別,放在其他的<requestHandler>標籤後面

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

接下來在conf裡建立data-config.xml檔案,檔名和上文的requestHandler標籤配置的str的值對應,有關聯

然後在data-config.xml檔案裡寫入下列程式碼,<dataSource/>標籤裡是資料庫連線配置,大家按照自己的配就好了,<document>標籤裡<entity>標籤包含的是要查詢的資料庫表的資料,既然要從資料庫匯入資料,就需要建立資料庫表,查詢資料庫表,兩邊配置務必相同

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
	<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" 
	url="jdbc:mysql://localhost:3306/test" user="root" password="root" name="productSource"/>
	<document>
		<entity name="product" query="SELECT pid,name,price,description FROM product " pk="pid" dataSource="productSource">
			<field column="pid" name="product_id"/>
			<field column="name" name="product_name"/>
			<field column="price" name="product_price"/>
			<field column="description" name="product_desc"/>
		</entity>
	</document>
</dataConfig>

所有的檔案配置完成後,回到DOS視窗,想要生效必須重啟服務:(先輸入第一條語句,-p代表停止的埠號,然後等提示完再啟動)

solr.cmd stop -p 8983
solr.cmd start

重啟成功後,瀏覽器重新整理或者重新開啟http://localhost:8983/,我們來測試一下結果,點選左側的下拉框,選擇建立好的core名字

選擇Analysis,測試中文分詞器

如果用的是Solr預設的分詞器,搜尋的結果就不友好了,會把名詞拆開查詢,效率低

如果用剛剛設定的中文分詞器(設定的名稱叫text_ik_zd),顯示的結果就很理想了,提高搜尋效率

接下來測試查詢匯入的資料庫資料,點選Schema,然後點選Add Field,name(資料庫表字段名)填的值對應data-config.xml檔案裡<field/>name的值,fieId type選name的資料型別(整數就pint,浮點數用pfloat······),資料庫表裡有多少欄位就新增多少個

新增完成後檢視新增的欄位

接下來匯入資料,選擇Dataimport,按下圖操作,兩個勾打上,選擇Entity哪個表,最下面的Auto-Refresh Status勾上,然後點選Execute執行

執行成功後顯示,匯入了3條資料

然後點選Query檢視資料,直接點選Execute Query,右側顯示資料,可以新增查詢條件進行查詢

以上就是Solr的配置使用,謝謝大家