solr 入門筆記

    solr採用Lucene搜索庫爲核心,提供全文索引和搜索開源企業平臺,提供REST的HTTP/XML和Json的API,以下是我的測試環境:

   1.solr版本4.5.0

   2.jdk是1.6

準備

java相關壞境配置,相信大家熟知,然後下載並解壓solr,最後在解壓後的目錄下solr-4.5.0 ->example 找到start.jar

運行cmd運行:

java -jar start.jar


表示已經成功啓動solr服務

接着瀏覽器中訪問:http://localhost:8983/solr/ 後就能開到solr的管理界面。

索引數據

服務啓動之後,目前你看到的界面沒有任何數據,你可以通過POSTing命令向Solr中添加(更新)文檔,刪除文檔,在exampledocs目錄包含一些

實例文件,運行命令:

java -jar post.jar solr.xm monitor.xml   或者 添加所有xml文件:java -jar post.jar *.xml


上兩圖分別表示向Solr添加了兩份xml文檔和目錄底下所有的xml文件,先看看solr.xml裏面的文件內容:


添加的文檔就是數據源,現在就可以通過管理界面來搜索關鍵詞“solr”:



然後點擊下面的 Execute Query按鈕後右側會出現查詢結果,這個結果就是剛剛添加到solr.xml文檔Json格式的展示結果。Solr支持豐富的查詢語法,

如:現在想搜索字段name的值爲:Search,就可以用name:search,當然你在本測試環境中搜索是沒有結果的,因爲文檔就沒有這樣的內容。


數據導入

Solr導入數據的方式的多種多樣的:

1.可以使用DIH(DataImportHandler)從數據庫導入數據

2.支持CSV文件導入,因此Excel也可以導入

3.支持Json格式文檔

4.二進制文檔,如:Word、PDF

5.以編程的方式來自定義導入


更新數據

如果是同一份分檔solr.xml重複導入會出現什麼情況呢? 實際上solr會根據文檔的字段Id來唯一標示文檔,如果導入的文檔的Id已經存在在Solr中,

那麼這份文檔就被最新導入的同Id的文檔自動替換,檢測的方法是管理界面的幾個參數:Num Docs,Max Doc,Deleted Docs的變化。

Num Docs:當前系統中的文檔數量,它有可能大於xml文件數,因爲一個xml文件可能會有多個<doc>標籤

Max Doc:有可能比Num Docs的值大,比如重複post同一份文件後,maxDoc的值就增大了

Deleted Docs:重複post文件會替換老的文檔,同時deletedDocs的值會加1,不過這只是邏輯刪除,並沒有真正從索引中刪除


刪除數據

通過Id刪除文檔,或者通過一個查詢來刪除匹配文檔

java -Ddata=args -jar post.jar "<delete><id>SOLR1000</id></delete>"

java -Ddata=args -jar post.jar "<delete><query>name:DDR</query></delete>"

此時solr.xml文檔已經從索引中刪除,再次搜索不在返回結果。當然solr也有數據庫中的事務,執行刪除命令的時候,會自動提交。

文檔就會立即從索引中刪除,你也可以將commit設置爲false,手動提交事務:

java -Ddata=args -Dcommit=false -jar post.jar "<delete><id>SOLR1000</id></delete>"

執行上面的命令後,並沒有真正刪除,還是可以搜索到結果,還要通過以下命令:

java -jar post.jar -

提交事務,文檔就徹底刪除了。現在我們又重新導入數據文檔,繼續:

刪除所有數據:

http://localhost:8983/solr/collection1/update?stream.body=<delete><query>*:*</query></delete>&commit=true

刪除指定數據:

http://localhost:8983/solr/collection1/update?stream.body=<delete><query>title:abc</query></delete>&commit=true

多條件刪除:

http://localhost:8983/solr/collection1/update?stream.body=<delete><query>title:abc AND name:zhang</query></delete>&commit=true


查詢數據

查詢數據都是通過HTTP的GET請求獲取的,搜索關鍵詞用參數:q,另外還可以指定很多可選的參數來控制信息的返回,例如:

f1=name,那麼返回的數據就只包括name字段的內容。

http://localhost:8983/solr/collection1/select?q=solr&fl=name&wt=json&indent=true


排序

Solr提供排序功能,通過參數sort來指定,支持正序,倒序,或者多個字段排序

q=video&sort=price desc

q=video&sort=price asc

q=video&sort=inStock asc,price desc

默認條件下,Solr根據socre倒序,socre是一條搜索記錄根據相關度計算出來的一個分數。


高亮

網頁搜索中,爲了突顯搜索結果,可能會對匹配的關鍵詞高亮出來,Solr提供了很好的支持,只要指定參數:

hl=true #開啓高亮功能

hl.fl=name #指定需要高亮的字段

http://localhost:8983/solr/collection1/select?q=Search&wt=json&indent=true&hl=true&hl.fl=features

返回的內容包括:

"highlighting":{
       "SOLR1000":{
           "features":["Advanced Full-Text <em>Search</em> Capabilities using Lucene"]
       }
}

文本分析

文本字段通過把文本分割成單詞以及運用各種轉換方法(如:小寫轉換、複數移除、詞幹提取)後被索引,schema.xml文件中定義了字段在

索引中,這些字段將作用於其中,默認情況下搜索“power-shot”是不能匹配“powershot”的,通過修改schema.xml文件(solr/example/

solr/collection1/conf),把features和text字段替換成“text_en_splitting”類型,就能索引到了。

<field name="features" type="text_en_splitting" indexed="true" stored="true" multiValued="true"/>
...
<field name="text" type="text_en_splitting" indexed="true" stored="false" multiValued="true"/>

修改完之後,重啓solr,然後重新導入文檔:
java -jar post.jar *.xml
就可以匹配了。

筆記到此!
最後的文本分析有待驗證。



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