solr

一、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)更新索引庫

 

 

 

 

 

 

 

 

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