您好,登錄后才能下訂單哦!
這篇文章主要介紹“solr索引數(shù)據(jù)的方法是什么”,在日常操作中,相信很多人在solr索引數(shù)據(jù)的方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”solr索引數(shù)據(jù)的方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
本教程以solr4.8作為測試環(huán)境,jdk版本需要1.7及以上版本。
本文假設(shè)你對Java有初中級以上水平,因此不再介紹Java相關(guān)環(huán)境的配置。下載解壓縮solr,在example目錄有start.jar文件,啟動:
1 | java -jar start.jar |
瀏覽器訪問:http://localhost:8983/solr/,你看到的就是solr的管理界面
服務(wù)啟動后,目前你看到的界面沒有任何數(shù)據(jù),你可以通過POSTing命令向Solr中添加(更新)文檔,刪除文檔,在exampledocs目錄包含一些示例文件,運行命令:
1 | java -jar post.jar solr.xml monitor.xml |
上面的命令是向solr添加了兩份文檔,打開這兩個文件看看里面是什么內(nèi)容,solr.xml里面的內(nèi)容是:
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é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> |
表示向索引中添加一個文檔,文檔就是用來搜索的數(shù)據(jù)源,現(xiàn)在就可以通過管理界面搜索關(guān)鍵字”solr”,具體步驟是:
點擊頁面下的Execute Query按鈕后右側(cè)就會顯示查詢結(jié)果,這個結(jié)果就是剛才導入進去的solr.xml的json格式的展示結(jié)果。solr支持豐富的查詢語法,比如:現(xiàn)在想搜索字段name里面的關(guān)鍵字”Search”就可以用語法name:search,當然如果你搜索name:xxx就沒有返回結(jié)果了,因為文檔中沒有這樣的內(nèi)容。
導入數(shù)據(jù)到Solr的方式也是多種多樣的:
可以使用DIH(DataImportHandler)從數(shù)據(jù)庫導入數(shù)據(jù)
支持CSV文件導入,因此Excel數(shù)據(jù)也能輕松導入
支持JSON格式文檔
二進制文檔比如:Word、PDF
還能以編程的方式來自定義導入
如果同一份文檔solr.xml重復(fù)導入會出現(xiàn)什么情況呢?實際上solr會根據(jù)文檔的字段id來唯一標識文檔,如果導入的文檔的id已經(jīng)存在solr中,那么這份文檔就被最新導入的同id的文檔自動替換。你可以自己嘗試試驗一下,觀察替換前后管理界面的幾個參數(shù):Num Docs,Max Doc,Deleted Docs的變化。
numDocs:當前系統(tǒng)中的文檔數(shù)量,它有可能大于xml文件個數(shù),因為一個xml文件可能有多個<doc>標簽。
maxDoc:maxDoc有可能比numDocs的值要大,比如重復(fù)post同一份文件后,maxDoc值就增大了。
deletedDocs:重復(fù)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”時不再返回結(jié)果。當然solr也有數(shù)據(jù)庫中的事務(wù),執(zhí)行刪除命令的時候事務(wù)自動提交了,文檔就會立即從索引中刪除。你也可以把commit設(shè)置為false,手動提交事務(wù)。
1 | java -Ddata=args -Dcommit=false-jar post.jar"<delete><id>3007WFP</id></delete>" |
執(zhí)行完上面的命令時文檔并沒有真正刪除,還是可以繼續(xù)搜索相關(guān)結(jié)果,最后可以通過命令:
1 | java -jar post.jar - |
提交事務(wù),文檔就徹底刪除了?,F(xiàn)在把剛剛刪除的文件重新導入Solr中來,繼續(xù)我們的學習。
刪除所有數(shù)據(jù):
1 | http://localhost:8983/solr/collection1/update?stream.body=<delete><query>*:*</query></delete>&commit=true |
刪除指定數(shù)據(jù)
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 |
查詢數(shù)據(jù)都是通過HTTP的GET請求獲取的,搜索關(guān)鍵字用參數(shù)q指定,另外還可以指定很多可選的參數(shù)來控制信息的返回,例如:用fl指定返回的字段,比如f1=name,那么返回的數(shù)據(jù)就只包括name字段的內(nèi)容
1 | http://localhost:8983/solr/collection1/select?q=solr&fl=name&wt=json&indent=true |
排序
Solr提供排序的功能,通過參數(shù)sort來指定,它支持正序、倒序,或者多個字段排序
q=video&sort=price desc
q=video&sort=price asc
q=video&sort=inStock asc, price desc
默認條件下,Solr根據(jù)socre倒序排列,socre是一條搜索記錄根據(jù)相關(guān)度計算出來的一個分數(shù)。
高亮
網(wǎng)頁搜索中,為了突出搜索結(jié)果,可能會對匹配的關(guān)鍵字高亮出來,Solr提供了很好的支持,只要指定參數(shù):
hl=true #開啟高亮功能
hl.fl=name #指定需要高亮的字段
1 | http://localhost:8983/solr/collection1/select?q=Search&wt=json&indent=true&hl=true&hl.fl=features |
返回的內(nèi)容中包含:
1 2 3 4 5 | "highlighting":{ "SOLR1000":{ "features":["Advanced Full-Text <em>Search</em> Capabilities using Lucene"] } } |
文本字段通過把文本分割成單詞以及運用各種轉(zhuǎn)換方法(如:小寫轉(zhuǎn)換、復(fù)數(shù)移除、詞干提取)后被索引,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 |
現(xiàn)在就可以匹配了
power-shot—>Powershot
features:recharing—>Rechargeable
1 gigabyte –> 1G
到此,關(guān)于“solr索引數(shù)據(jù)的方法是什么”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。