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