Solr基礎教程之solrconfig.xml(三)

前面介紹過schema.xml的一些配置信息,本章介紹solrconfig.xml的配置,以及怎樣安裝smartcn分詞器和IK分詞器,並介紹主要的查詢語法。php

一、 solr配置solrconfig.xml算法

solrconfig.xml這個配置文件可以在你下載solr包的安裝解壓文件夾的D:\solr-4.10.4\example\solr\collection1\conf中找到,這個配置文件內容有點多,主要內容有:使用的lib配置,包括依賴的jar和Solr的一些插件;組件信息配置;索引配置和查詢配置,如下具體說一下索引配置和查詢配置.apache

二、索引indexConfigjson

Solr 性能因素,來了解與各類更改相關的性能權衡。緩存

表 1 歸納了可控制 Solr 索引處理的各類因素:ruby

屬性 描寫敘述
useCompoundFile 經過將很是多 Lucene 內部文件整合到一個文件來下降使用中的文件的數量。這可有助於下降 Solr 使用的文件句柄數目,代價是下降了性能。除非是應用程序用完了文件句柄。不然 false 的默認值應該就已經足夠。

ramBufferSizeMB maxBufferedDocs 在加入或刪除文檔時,爲了下降頻繁的更些索引,Solr會選緩存在內存中,當內存中的文件大於設置的值,纔會更新到索引庫。較大的值可以使索引時間變快但會犧牲較多的內存。如兩個值同一時候設置,知足一個就會進行刷新索引.
mergeFactor 決定低水平的 Lucene 段被合併的頻率。

較小的值(最小爲 2)使用的內存較少但致使的索引時間也更慢。較大的值可以使索引時間變快但會犧牲較多的內存。markdown

maxIndexingThreads indexWriter生成索引時使用的最大線程數
unlockOnStartup unlockOnStartup 告知 Solr 忽略在多線程環境中用來保護索引的鎖定機制。在某些狀況下,索引可能會因爲不對的關機或其餘錯誤而一直處於鎖定。這就妨礙了加入和更新。

將其設置爲 true 可以禁用啓動鎖定。進而贊成進行加入和更新。多線程

lockType single: 在僅僅讀索引或是沒有其餘進程改動索引時使用。native: 使用操做系統本地文件鎖,不能使用多個Solr在同一個JVM中共享一個索引。 simple :使用一個文本文件鎖定索引。

三、 查詢配置querypost

屬性 描寫敘述
maxBooleanClauses 最大的BooleanQuery數量. 當值超出時。拋出 TooManyClausesException.注意這個是全局的,假設是多個SolrCore都會使用一個值,每個Core裏設置不同的化,會使用最後一個的.
filterCache filterCache存儲了無序的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數量

四、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中.

<lib dir="../../../solr-4.10.4/contrib/analysis-extras/lib" regex=".*\.jar" />
<!-- 這裏我寫的是這個jar包對應當前文件solrconfig.xml的相對路徑 -->

假設不想寫上面這樣的引入,也可以將該jar包放入solr的WEB-INF\lib如下也能達到相同的效果。

四、 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定義的那一段,在如下多加入這一段就好啦

<fieldType name="text_smartcn" class="solr.TextField" positionIncrementGap="0">

      <analyzer type="index">

        <tokenizer class="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/>

        <filter class="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/>

      </analyzer>

      <analyzer type="query">

         <tokenizer class="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/>

        <filter class="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/>

      </analyzer>

</fieldType>

假設需要檢索某個字段,還需要在scheme.xml如下的field中,加入指定的字段。用text_ smartcn做爲type的名字。來完畢中文分詞。如 text要實現中文檢索的話,就要作例如如下的配置:

<field name ="text" type ="text_smartcn" indexed ="true" stored ="false" multiValued ="true"/>

五、 IK 分詞器的安裝

首選要去下載IKAnalyzer的發行包.下載地址: http://ik-analyzer.googlecode.com/files/IK%20Analyzer%202012FF_hf1.zip.

下載後解壓出來文件裏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了.

<fieldType name="text_ik" class="solr.TextField">
    <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

<field name ="text" type ="text_ik" indexed ="true" stored ="false" multiValued ="true"/>

現在來驗證下是否加入成功,首先使用StartSolrJetty來啓動solr服務,啓動過程當中假設配置出錯,通常有兩個緣由:一是配置的分詞器jar找不到,也就是你沒有複製jar包到\solr\contrib\analysis-extras\lib眼下下;二是分詞器版本號不對致使的分詞器接口API不同出的錯,要是這個錯的話就在檢查分詞器的相關文檔,看一下支持的版本號是否同樣.

假設在啓動過程當中沒有報錯的話說明配置成功了.咱們可以進入到http://localhost:8983/solr地址進行測試一下剛加入的中文分詞器.在首頁的Core Selector中選擇你配置的Croe後點擊如下的Analysis,在Analyse Fieldname / FieldType裏選擇你剛纔設置的字段名稱或是分詞器類型,在Field Value(index)中輸入:中國人,點擊右面的分詞便可了.

六、查詢參數
常用
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],找keywordmm。並且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 - 查詢語法的版本號,建議不使用它,由server指定默認值。

[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}
」 轉義操做符,特殊字符包括+ - && || ! ( ) { } [ ] ^ 」 ~ * ?

: 「

相關文章
相關標籤/搜索