共計 4031 個字符,預計需要花費 11 分鐘才能閱讀完成。
這篇文章主要介紹“solr 索引數據的方法是什么”,在日常操作中,相信很多人在 solr 索引數據的方法是什么問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”solr 索引數據的方法是什么”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!
本教程以 solr4.8 作為測試環境,jdk 版本需要 1.7 及以上版本。
準備
本文假設你對 Java 有初中級以上水平,因此不再介紹 Java 相關環境的配置。下載解壓縮 solr,在 example 目錄有 start.jar 文件,啟動:
1
java -jar start.jar
瀏覽器訪問:http://localhost:8983/solr/,你看到的就是 solr 的管理界面
索引數據
服務啟動后,目前你看到的界面沒有任何數據,你可以通過 POSTing 命令向 Solr 中添加(更新)文檔,刪除文檔,在 exampledocs 目錄包含一些示例文件,運行命令:
1
java -jar post.jar solr.xml monitor.xml
上面的命令是向 solr 添加了兩份文檔,打開這兩個文件看看里面是什么內容,solr.xml 里面的內容是:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
add
doc
field name= id SOLR1000 /field
field name= name Solr, the Enterprise Search Server /field
field name= manu Apache Software Foundation /field
field name= cat software /field
field name= cat search /field
field name= features Advanced Full-Text Search Capabilities using Lucene /field
field name= features OptimizedforHigh Volume Web Traffic /field
field name= features Standards Based Open Interfaces – XML and HTTP /field
field name= features Comprehensive HTML Administration Interfaces /field
field name= features Scalability – Efficient Replication to other Solr Search Servers /field
field name= features Flexible and Adaptable with XML configuration and Schema /field
field name= features Good unicode support: h #xE9;llo (hello with an accent over the e) /field
field name= price 0 /field
field name= popularity 10 /field
field name= inStock true /field
field name= incubationdate_dt 2006-01-17T00:00:00.000Z /field
/doc
/add
表示向索引中添加一個文檔,文檔就是用來搜索的數據源,現在就可以通過管理界面搜索關鍵字”solr”,具體步驟是:
點擊頁面下的 Execute Query 按鈕后右側就會顯示查詢結果,這個結果就是剛才導入進去的 solr.xml 的 json 格式的展示結果。solr 支持豐富的查詢語法,比如:現在想搜索字段 name 里面的關鍵字”Search”就可以用語法 name:search,當然如果你搜索 name:xxx 就沒有返回結果了,因為文檔中沒有這樣的內容。
數據導入
導入數據到 Solr 的方式也是多種多樣的:
可以使用 DIH(DataImportHandler) 從數據庫導入數據
支持 CSV 文件導入,因此 Excel 數據也能輕松導入
支持 JSON 格式文檔
二進制文檔比如:Word、PDF
還能以編程的方式來自定義導入
更新數據
如果同一份文檔 solr.xml 重復導入會出現什么情況呢?實際上 solr 會根據文檔的字段 id 來唯一標識文檔,如果導入的文檔的 id 已經存在 solr 中,那么這份文檔就被最新導入的同 id 的文檔自動替換。你可以自己嘗試試驗一下,觀察替換前后管理界面的幾個參數:Num Docs,Max Doc,Deleted Docs 的變化。
numDocs:當前系統中的文檔數量,它有可能大于 xml 文件個數,因為一個 xml 文件可能有多個 doc 標簽。
maxDoc:maxDoc 有可能比 numDocs 的值要大,比如重復 post 同一份文件后,maxDoc 值就增大了。
deletedDocs:重復 post 的文件會替換掉老的文檔,同時 deltedDocs 的值也會加 1,不過這只是邏輯上的刪除,并沒有真正從索引中移除掉
刪除數據
通過 id 刪除指定的文檔,或者通過一個查詢來刪除匹配的文檔
1
2
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”時不再返回結果。當然 solr 也有數據庫中的事務,執行刪除命令的時候事務自動提交了,文檔就會立即從索引中刪除。你也可以把 commit 設置為 false,手動提交事務。
1
java -Ddata=args -Dcommit=false-jar post.jar delete id 3007WFP /id /delete
執行完上面的命令時文檔并沒有真正刪除,還是可以繼續搜索相關結果,最后可以通過命令:
1
java -jar post.jar –
提交事務,文檔就徹底刪除了。現在把剛剛刪除的文件重新導入 Solr 中來,繼續我們的學習。
刪除所有數據:
1
http://localhost:8983/solr/collection1/update?stream.body= delete query *:* /query /delete commit=true
刪除指定數據
1
http://localhost:8983/solr/collection1/update?stream.body= delete query title:abc /query /delete commit=true
多條件刪除
1
http://localhost:8983/solr/collection1/update?stream.body= delete query title:abc AND name:zhang /query /delete commit=true
查詢數據
查詢數據都是通過 HTTP 的 GET 請求獲取的,搜索關鍵字用參數 q 指定,另外還可以指定很多可選的參數來控制信息的返回,例如:用 fl 指定返回的字段,比如 f1=name,那么返回的數據就只包括 name 字段的內容
1
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 #指定需要高亮的字段
1
http://localhost:8983/solr/collection1/select?q=Search wt=json indent=true hl=true hl.fl=features
返回的內容中包含:
1
2
3
4
5
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”類型,就能索引到了。
1
2
3
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,然后重新導入文檔
1
java -jar post.jar *.xml
現在就可以匹配了
power-shot— Powershot
features:recharing— Rechargeable
1 gigabyte – 1G
到此,關于“solr 索引數據的方法是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注丸趣 TV 網站,丸趣 TV 小編會繼續努力為大家帶來更多實用的文章!