solr php 中文分词,solr分词以及搜索
1、 solr配置solrconfig.xml
solrconfig.xml這個(gè)配置文件可以在你下載solr包的安裝解壓目錄的D:\solr-4.10.4\example\solr\collection1\conf中找到,這個(gè)配置文件內(nèi)容有點(diǎn)多,主要內(nèi)容有:使用的lib配置,包含依賴的jar和Solr的一些插件;組件信息配置;索引配置和查詢配置,下面詳細(xì)說(shuō)一下索引配置和查詢配置.
2、索引indexConfig
Solr 性能因素,來(lái)了解與各種更改相關(guān)的性能權(quán)衡。 表 1 概括了可控制 Solr 索引處理的各種因素:屬性描述useCompoundFile通過(guò)將很多 Lucene 內(nèi)部文件整合到一個(gè)文件來(lái)減少使用中的文件的數(shù)量。這可有助于減少 Solr 使用的文件句柄數(shù)目,代價(jià)是降低了性能。除非是應(yīng)用程序用完了文件句柄,否則 false 的默認(rèn)值應(yīng)該就已經(jīng)足夠。
ramBufferSizeMB maxBufferedDocs在添加或刪除文檔時(shí),為了減少頻繁的更些索引,Solr會(huì)選緩存在內(nèi)存中,當(dāng)內(nèi)存中的文件大于設(shè)置的值,才會(huì)更新到索引庫(kù)。較大的值可使索引時(shí)間變快但會(huì)犧牲較多的內(nèi)存。如兩個(gè)值同時(shí)設(shè)置,滿足一個(gè)就會(huì)進(jìn)行刷新索引.
mergeFactor決定低水平的 Lucene 段被合并的頻率。較小的值(最小為 2)使用的內(nèi)存較少但導(dǎo)致的索引時(shí)間也更慢。較大的值可使索引時(shí)間變快但會(huì)犧牲較多的內(nèi)存。
maxIndexingThreadsindexWriter生成索引時(shí)使用的最大線程數(shù)
unlockOnStartupunlockOnStartup 告知 Solr 忽略在多線程環(huán)境中用來(lái)保護(hù)索引的鎖定機(jī)制。在某些情況下,索引可能會(huì)由于不正確的關(guān)機(jī)或其他錯(cuò)誤而一直處于鎖定,這就妨礙了添加和更新。將其設(shè)置為 true 可以禁用啟動(dòng)鎖定,進(jìn)而允許進(jìn)行添加和更新。
lockTypesingle: 在只讀索引或是沒有其它進(jìn)程修改索引時(shí)使用。native: 使用操作系統(tǒng)本地文件鎖,不能使用多個(gè)Solr在同一個(gè)JVM中共享一個(gè)索引。 simple :使用一個(gè)文本文件鎖定索引。
3、 查詢配置query屬性描述maxBooleanClauses最大的BooleanQuery數(shù)量. 當(dāng)值超出時(shí),拋出 TooManyClausesException.注意這個(gè)是全局的,如果是多個(gè)SolrCore都會(huì)使用一個(gè)值,每個(gè)Core里設(shè)置不一樣的化,會(huì)使用最后一個(gè)的.
filterCachefilterCache存儲(chǔ)了無(wú)序的lucene document id集合,1.存儲(chǔ)了filter queries(“fq”參數(shù))得到的document id集合結(jié)果。2還可用于facet查詢3. 3)如果配置了useFilterForSortedQuery,那么如果查詢有filter,則使用filterCache。
queryResultCache緩存搜索結(jié)果,一個(gè)文檔ID列表
documentCache緩存Lucene的Document對(duì)象,不會(huì)自熱
fieldValueCache字段緩存使用文檔ID進(jìn)行快速訪問。默認(rèn)情況下創(chuàng)建fieldValueCache即使這里沒有配置。
enableLazyFieldLoading若應(yīng)用程序預(yù)期只會(huì)檢索 Document 上少數(shù)幾個(gè) Field,那么可以將屬性設(shè)置為 true。延遲加載的一個(gè)常見場(chǎng)景大都發(fā)生在應(yīng)用程序返回和顯示一系列搜索結(jié)果的時(shí)候,用戶常常會(huì)單擊其中的一個(gè)來(lái)查看存儲(chǔ)在此索引中的原始文檔。初始的顯示常常只需要顯示很短的一段信息。若考慮到檢索大型 Document 的代價(jià),除非必需,否則就應(yīng)該避免加載整個(gè)文檔。
queryResultWindowSize一次查詢中存儲(chǔ)最多的doc的id數(shù)目.
queryResultMaxDocsCached查詢結(jié)果doc的最大緩存數(shù)量, 例如要求每頁(yè)顯示10條,這里設(shè)置是20條,也就是說(shuō)緩存里總會(huì)給你多出10條的數(shù)據(jù).讓你點(diǎn)示下一頁(yè)時(shí)很快拿到數(shù)據(jù).
listener選項(xiàng)定義 newSearcher 和 firstSearcher 事件,您可以使用這些事件來(lái)指定實(shí)例化新搜索程序或第一個(gè)搜索程序時(shí)應(yīng)該執(zhí)行哪些查詢。如果應(yīng)用程序期望請(qǐng)求某些特定的查詢,那么在創(chuàng)建新搜索程序或第一個(gè)搜索程序時(shí)就應(yīng)該反注釋這些部分并執(zhí)行適當(dāng)?shù)牟樵儭?/p>
useColdSearcher是否使用冷搜索,為false時(shí)使用自熱后的searcher
maxWarmingSearchers最大自熱searcher數(shù)量
4、Solr加入中文分詞器
中文分詞在solr里面是沒有默認(rèn)開啟的,需要我們自己配置一個(gè)中文分詞器。目前可用的分詞器有smartcn,IK,Jeasy,庖丁。其實(shí)主要是兩種,一種是基于中科院ICTCLAS的隱式馬爾科夫HMM算法的中文分詞器,如smartcn,ictclas4j,優(yōu)點(diǎn)是分詞準(zhǔn)確度高,缺點(diǎn)是不能使用用戶自定義詞庫(kù);另一種是基于最大匹配的分詞器,如IK ,Jeasy,庖丁,優(yōu)點(diǎn)是可以自定義詞庫(kù),增加新詞,缺點(diǎn)是分出來(lái)的垃圾詞較多。各有優(yōu)缺點(diǎn)看應(yīng)用場(chǎng)合自己衡量選擇吧。
下面給出兩種分詞器的安裝方法,任選其一即可,推薦第一種,因?yàn)閟martcn就在solr發(fā)行包的contrib/analysis-extras/lucene-libs/下,就是lucene-analyzers-smartcn-4.2.0.jar,首選在solrconfig.xml中加一句引用analysis-extras的配置,這樣我們自己加入的分詞器才會(huì)引到的solr中.1212
如果不想寫上面這種引入,也可以將該jar包放入solr的WEB-INF\lib下面也能達(dá)到同樣的效果。
4、 smartcn 分詞器的安裝
首選將發(fā)行包的contrib/analysis-extras/lucene-libs/ lucene-analyzers-smartcn-4.2.0.jar復(fù)制到solr的WEB-INF\lib下面,打開/solr/mycore/conf/scheme.xml,編輯text字段類型如下,添加以下代碼到scheme.xml中的相應(yīng)位置,就是找到fieldType定義的那一段,在下面多添加這一段就好啦
1234567891011121314151617181912345678910111213141516171819
如果需要檢索某個(gè)字段,還需要在scheme.xml下面的field中,添加指定的字段,用text_ smartcn作為type的名字,來(lái)完成中文分詞。如 text要實(shí)現(xiàn)中文檢索的話,就要做如下的配置:11
5、 IK 分詞器的安裝
下載后解壓出來(lái)文件中IKAnalyzer.cfg.xml、Stopword.dic放到solr的/WEB-INF/classes目錄下(沒有就創(chuàng)建classes文件夾),將IKAnalyzer2012FF_u1.jar放到solr的/WEB-INF/lib下面.
IKAnalyzer2012FF_u1.jar 分詞器jar包
IKAnalyzer.cfg.xml 分詞器配置文件
Stopword.dic 分詞器停詞字典,可自定義添加內(nèi)容
完成后就可以像smartcn一樣的進(jìn)行配置scheme.xml了.
1234512345
現(xiàn)在來(lái)驗(yàn)證下是否添加成功,首先使用StartSolrJetty來(lái)啟動(dòng)solr服務(wù),啟動(dòng)過(guò)程中如果配置出錯(cuò),一般有兩個(gè)原因:一是配置的分詞器jar找不到,也就是你沒有復(fù)制jar包到\solr\contrib\analysis-extras\lib目前下;二是分詞器版本不對(duì)導(dǎo)致的分詞器接口API不一樣出的錯(cuò),要是這個(gè)錯(cuò)的話就在檢查分詞器的相關(guān)文檔,看一下支持的版本是否一樣.
如果在啟動(dòng)過(guò)程中沒有報(bào)錯(cuò)的話說(shuō)明配置成功了.我們可以進(jìn)入到http://localhost:8080/solr地址進(jìn)行測(cè)試一下剛加入的中文分詞器.在首頁(yè)的Core Selector中選擇你配置的Croe后點(diǎn)擊下面的Analysis,在Analyse Fieldname / FieldType里選擇你剛才設(shè)置的字段名稱或是分詞器類型,在Field Value(index)中輸入:中國(guó)人,點(diǎn)擊右面的分詞就行了.
6、查詢參數(shù)
常用
q - 查詢字符串,必須的。
fl - 指定返回那些字段內(nèi)容,用逗號(hào)或空格分隔多個(gè)。
start - 返回第一條記錄在完整找到結(jié)果中的偏移位置,0開始,一般分頁(yè)用。
rows - 指定返回結(jié)果最多有多少條記錄,配合start來(lái)實(shí)現(xiàn)分頁(yè)。
sort - 排序,格式:sort=”field name”+”desc|asc”[,”field name”+”desc|asc”]… 。示例:(inStock desc, price asc)表示先 “inStock” 降序, 再 “price” 升序,默認(rèn)是相關(guān)性降序。
wt - (writer type)指定輸出格式,可以有 xml, json,?PHP, phps, 后面 solr 1.3增加的,要用通知我們,因?yàn)槟J(rèn)沒有打開。
fq - (filter query)過(guò)慮查詢,作用:在q查詢符合結(jié)果中同時(shí)是fq查詢符合的,例如:q=mm&fq=date_time:[20081001 TO 20091031],找關(guān)鍵字mm,并且date_time是20081001到20091031之間的。官方文檔:http://wiki.apache.org/solr/CommonQueryParameters
不常用
q.op - 覆蓋schema.xml的defaultOperator(有空格時(shí)用”AND”還是用”O(jiān)R”操作邏輯),一般默認(rèn)指定
df - 默認(rèn)的查詢字段,一般默認(rèn)指定
qt - (query type)指定那個(gè)類型來(lái)處理查詢請(qǐng)求,一般不用指定,默認(rèn)是standard。
其它
indent - 返回的結(jié)果是否縮進(jìn),默認(rèn)關(guān)閉,用 indent=true|on 開啟,一般調(diào)試json,php,phps,ruby輸出才有必要用這個(gè)參數(shù)。
version - 查詢語(yǔ)法的版本,建議不使用它,由服務(wù)器指定默認(rèn)值。
[Solr的檢索運(yùn)算符]
“:” 指定字段查指定值,如返回所有值*:*
“?”表示單個(gè)任意字符的通配
“*” 表示多個(gè)任意字符的通配(不能在檢索的項(xiàng)開始使用*或者?符號(hào))
“~”表示模糊檢索,如檢索拼寫類似于”roam”的項(xiàng)這樣寫:roam~將找到形如foam和roams的單詞;roam~0.8,檢索返回相似度在0.8以上的記錄。
鄰近檢索,如檢索相隔10個(gè)單詞的”apache”和”jakarta”,”jakarta apache”~10
“^”控制相關(guān)度檢索,如檢索jakarta apache,同時(shí)希望去讓”jakarta”的相關(guān)度更加好,那么在其后加上”^”符號(hào)和增量值,即jakarta^4 apache
布爾操作符AND、||
布爾操作符OR、&&
布爾操作符NOT、!、-(排除操作符不能單獨(dú)與項(xiàng)使用構(gòu)成查詢)
“+” 存在操作符,要求符號(hào)”+”后的項(xiàng)必須在文檔相應(yīng)的域中存在
( ) 用于構(gòu)成子查詢
[] 包含范圍檢索,如檢索某時(shí)間段記錄,包含頭尾,date:[200707 TO 200710]
{}不包含范圍檢索,如檢索某時(shí)間段記錄,不包含頭尾
date:{200707 TO 200710}
” 轉(zhuǎn)義操作符,特殊字符包括+ - && || ! ( ) { } [ ] ^ ” ~ * ? : “
總結(jié)
以上是生活随笔為你收集整理的solr php 中文分词,solr分词以及搜索的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 诺禾-java
- 下一篇: PHP curl--电信手机号码话费余额