全文檢索技術solr(簡單介紹)

這篇博客寫着寫着突然發現並不好寫,solr應該結合項目來寫才能易於理解,而項目又不好放在這篇博客裏,因此我也就簡單的介紹一下.

solr的概述

對於絕大多數的項目都離不開搜索的功能,問題是搜索功能往往是巨大的資源消耗並且它們沉重的數據庫加載而拖垮應用的性能,Apache Solr 就可以解決以上的問題,Solr是一個高性能,採用Java5開發,基於Lucene的全文搜索服務器.同時對其進行了擴展,提供了比Lucene更爲豐富的查詢語言,同時實現了可配置,可擴展並對查詢性能進行了優化,並且提供了一個完善的功能管理界面,是一款非常優秀的全文搜索引擎.

solr的工作原理

solr的工作方式是文檔通過Http利用XML 加到一個搜索集合中,查詢該集合也是通過http收到一個XML/JSON響應來實現.它的主要特性包括:高效、靈活的緩存功能,垂直搜索功能,高亮顯示搜索結果,通過索引複製來提高可用性,提供一套強大Data Schema來定義字段,類型和設置文本分析,提供基於Web的管理界面等.總結一句話就是用戶可以通過http請求向搜索引擎服務器提交一定格式的xml文件生成索引,也可以通過http get操作提出查詢的請求得到xml/json格式的返回結果.

solr的安裝

solr需要部署到服務器上,假設部署到Tomcat上,首先把solr 下的 dist 目錄 solr-4.10.3.war 複製到 Tomcat\webapps 下(爲了方便訪問可以去掉版本號),然後啓動Tomcat後自動解壓war包,再把solr下example/lib/ext 目錄下的所有的 jar 包,添加到 solr 的工程中(\WEB-INF\lib目錄下).然後再創建一個 solrhome ,solr 下的/example/solr 目錄就是一個 solrhome(創建solrhome位置可以直接放在根目錄下).關聯 solr 及 solrhome,需要修改 solr 工程的 web.xml 文件,標籤的屬性值指定solrhome的位置.最後啓動Tomcat,訪問solr.

中文分析器 IK Analyzer

因爲我們中文的特殊性,所以分詞可以使用這個分詞器,IK Analyzer 是一個開源的,基於java 語言開發的輕量級的中文分詞工具包.
它的使用配置如下:
1、把 IKAnalyzer2012FF_u1.jar 添加到 solr 工程的 lib 目錄下
2、創建 WEB-INF/classes 文件夾 把擴展詞典、停用詞詞典、配置文件放到 solr 工程的 WEB-INF/classes 目錄下
3、修改 Solrhome 的 schema.xml 文件,配置一個 FieldType,使用 IKAnalyzer



配置域:
域相當於數據庫的表字段,用戶存放數據,因此用戶根據業務需要去定義相關的 Field(域),一般來說,每一種對應着一種數據,用戶對同一種數據進行相同的操作.
域的常用屬性:
name:指定域的名稱
type:指定域的類型
indexed:是否索引
stored:是否存儲
required:是否必須
multiValued:是否多值
然後還有一些複製域(將某一個 Field 中的數據複製到另一個域中),動態域(我們需要動態擴充字段時,我們需要使用動態域)等.

Spring Data Solr 簡介

在實際項目中我們一般使用的是spring框架,然後solr也可以集成到spring中,就是使用spring data solr.
使用步驟:第一步是引入jar包依賴;
然後創建配置文件,主要內容如下:

<!--url應根據自己實際項目的地址填寫-->
<solr:solr-server id="solrServer" url="http://localhost:8080/solr" />
<!-- solr 模板,使用 solr 模板可對索引庫進行 CRUD 的操作 -->
<bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
<constructor-arg ref="solrServer" />
</bean>

我們項目中的實體類屬性使用@Field 註解標識 ,如果屬性與配置文件定義的域名稱不一致,需要在註解中指定域名稱.
當依賴注入solrTemplate的bean對象後就能執行CRUD操作了.

以上就是solr的基本簡介,在實際的項目中使用solr是非常複雜的,因爲本人能力有限再加上條件限制只能寫到這個地步,如果想要學習更多請自行查閱資料.

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