一、solr是什麼?
solr是一種開源的、基於Lucene的搜索引擎服務器。
二、solr和lucene的區別
(1)Lucene本質是搜索庫、不是獨立的應用程序。而solr是一個獨立的應用程序。
(2)Lucene專注於搜索底層的建設,solr專注於企業級應用。solr是lucene面向企業級搜索應用的擴展。
三、solr和Elasticsearch的區別
當單純的對已有數據進行搜索時,Solr更快。
當實時建立索引時, Solr會產生io阻塞,查詢性能較差, Elasticsearch具有明顯的優勢。
隨着數據量的增加,Solr的搜索效率會變得更低,而Elasticsearch卻沒有明顯的變化。
綜上所述,Solr的架構不適合實時搜索的應用。
Solr 利用 Zookeeper 進行分佈式管理,而 Elasticsearch 自身帶有分佈式協調管理功能;
Solr 支持更多格式的數據,而 Elasticsearch 僅支持json文件格式;
Solr 官方提供的功能更多,而 Elasticsearch 本身更注重於核心功能,高級功能多有第三方插件提供;
Solr 在傳統的搜索應用中表現好於 Elasticsearch,但在處理實時搜索應用時效率明顯低於 Elasticsearch。
Solr 是傳統搜索應用的有力解決方案,但 Elasticsearch 更適用於新興的實時搜索應用。
四、solr基礎
1、document
Document:Solr的信息的基本單位的是Document,它是一組描述某些事物的數據集合。
Field:Document的主要構成單元,是更具體的信息描述。
其實大家可以這樣理解,Document 對應於我們Java代碼中的一個類,而Field,則是類中的一個屬性。
2、模式配置:schema.xml
(1) Field :添加到索引文件中出現的屬性名稱,就是一個字段
域的分類:普通域、動態域、主鍵域、複製域
域的類型:
(2)dynamicField: 動態的字段設置,用於後期自定義字段,*號通配符.例如: test_i就是int類型的動態字段.
(3)copyField
比如現在你要查詢包涵"Java"的博客, 那麼你肯定要查內容,標題是否包含Java, 這個時候copyField就派上用場了, 定義一個新字段,將title和content 複製到這個新字段,索引的時候,直接從這個新字段查詢,這樣就達到目地了。 這便是copyField的典型應用場景 。注意:如果dest由多個source構成,就需要將其指定爲multiValued。
source和destination,一個是要複製的字段,另一個是要複製到哪個字段,
(4)fieldType:定義了solr如何去處理某個field的數據。定義添加到索引中的xml文件屬性中的類型可以包含字符串、數字、布爾值或者日期,也可以包含你想添加的任何類型
name:名字、class:實現類名即solr中真正的類型的類名。
<fieldtype name="phonetic" stored="false" indexed="true" class="solr.TextField" >
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.DoubleMetaphoneFilterFactory" inject="false"/>
</analyzer>
</fieldtype>
indexed 是否爲該 field建索引
stored 是否存儲該field的值,存儲以後,可以獲取到值,否則會獲取到Null
multiValued 是否是多值
3、solr配置solrconfig.xml
主要內容有:使用的lib配置,包含依賴的jar和Solr的一些插件;組件信息配置;索引配置和查詢配置,
4、solr中加入中文分詞器
中文分詞在solr裏面是沒有默認開啓的,需要我們自己配置一箇中文分詞器。目前可用的分詞器有smartcn,IK
如smartcn,ictclas4j,優點是分詞準確度高,缺點是不能使用用戶自定義詞庫;另一種是基於最大匹配的分詞器,如IK ,Jeasy,庖丁,優點是可以自定義詞庫,增加新詞,缺點是分出來的垃圾詞較多。
5、solr功能應用
(1)維護索引
在一般系統中維護的都是增刪改,在Solr中的維護功能是增刪和優化功能,在Solr中的修改操作就是先刪掉再添加.在做索引維護之前,首先要做的是配置schema.xml主要是按上面章節中的說明設置好字段信息(名稱,類型,索引,存儲,分詞等信息),大概就像在數據庫中新建一個表一樣.設置好schema.xml就可以進行索引相關操作了
增加索引、刪除索引
(2)增加索引
(3)優化索引
五、SolrJ
1、什麼是solrj
SolrJ是作Solr的JAVA客戶端,它提供了增加、修改、刪除、查詢Solr索引的JAVA接口。數據的批量導入
SolrJ針對 Solr提操供了Rest 的HTTP接口進行了封裝, SolrJ底層是通過使用httpClient中的方法來完成Solr的操作。
六、實戰使用教程
1、架構
2、具體步驟
(1)配置業務域【即索引字段】
***在schema.xml中定義業務域
***域需要指定fieldtype
***在fieldtype中指定分詞器
(2)把數據導入到索引庫
索引庫在solr服務器中
(3)設置搜索域
(4)根據條件搜索
(5)更新索引庫