1.solr原理:java
我本人的理解:solr是爲解決高性能的全文索引而出現的,它將用戶輸入的關鍵字進行智能分解,分解成一個個詞,過濾掉一些多餘的停詞及空格等,好比,「在」、「裏面」、「也」、「的」、「它」、「爲」這些詞都是中止詞。這些詞由於使用頻率太高,幾乎 每一個網頁上都存在,因此搜索引擎開發人員都將這一類詞語所有忽略掉。若是咱們的網站上存在大量這樣的詞語,那麼至關於浪費了不少資源。而後將分解以後的詞去建好的solr索引的字段中根據詞的比重逐一進行匹配,最後將符合條件的數據返回給用戶。
2.分詞原理:git
創建索引和查詢的過程當中,都是以基本的語素項爲單位的。基本的語素項就是經過分詞獲得。這個過程決定了索引單元金額最終的匹配過程。
分詞在文本索引的創建過程和用戶提交檢索過程當中都存在。利用相同的分詞器,把短語或者句子切分紅相同的結果,才能保證檢索過程順利進行。
一、 英文分詞的原理
基本的處理流程是:輸入文本、詞彙分割、詞彙過濾(去除停留詞)、詞幹提取(形態還原)、大寫轉爲小寫、結果輸出。
二、 中文分詞原理
中文分詞比較複雜,並無英文分詞那麼簡單。這主要是由於中文的詞與詞之間並不像英文中那樣用空格來隔開。
主要的方法有三種:基於詞典匹配的分詞方法、基於語義理解的分詞、基於詞頻統計的分詞。
3.Lucene:分詞器和索引文件github
目錄
分詞器
索引文件結構
經常使用的中文分詞器
一、分詞器
分詞器,對文本資源進行切分,將字符文本串按照必定的規則切分爲一個個能夠進行索引的最小單位(關鍵詞),以便檢索時使用。
創建索引和進行檢索時都要用到分詞器。爲了保證能正確的檢索到結果,在創建索引與進行檢索時使用的分詞器應是同一個。
二、索引文件結構
索引庫是一組索引文件的集合。
索引文件的檢索:索引表規模相對較小,文檔集合規模較大。進行檢索時,先從檢索索引表開始,而後找到相對應的文檔。若是查詢中僅包含一個關鍵詞,則在索引表中找到該關鍵詞,並取出它所對應的文檔就能夠了。若是查詢中包含多個關鍵詞,則須要將各個關鍵字檢索出的文檔記錄進行合併。
索引文件的維護:維護索引常使用三個操做:插入、刪除和更新文檔。可是更新操做須要較高的代價,由於文檔修改後(即便是很小的修改),也能夠形成文檔中的不少的關鍵詞的位置發生了變化,這時須要頻繁的讀取和修改記錄,這種代價是至關高的。所以,通常不進行更新操做,而是使用「先刪除,後建立」的方式代替更新操做。
三、經常使用的中文分詞器
ik-analyzer:IK Analyzer是一個開源的,基於java語言開發的輕量級的中文分詞工具包。從2006年12月推出1.0版開始, IKAnalyzer已經推出了4個大版本。最初,它是以開源項目Luence爲應用主體的,結合詞典分詞和文法分析算法的中文分詞組件。從3.0版本開始,IK發展爲面向Java的公用分詞組件,獨立於Lucene項目,同時提供了對Lucene的默認優化實現。在2012版本中,IK實現了簡單的分詞歧義排除算法,標誌着IK分詞器從單純的詞典分詞向模擬語義分詞衍化。
Ansj:Ansj中文分詞是一款純Java的主要應用於天然語言處理的高精度的中文分詞。追求的目標是--準確-高效-自由。包括:中文分詞、人名識別、地名識別、組織機構名識別、多級詞性標註、關鍵詞提取、指紋提取支持行業詞典、用戶自定義詞典。Ansj 是基於中科院的 ictclas 中文分詞算法,比其餘經常使用的開源分詞工具(如mmseg4j)的分詞準確率更高。
在線演示:http://ansj.sdapp.cn/demo/seg.jsp
官網地址:http://www.ansj.org/
Github地址:https://github.com/ansjsun/ansj_seg
mmseg4j:用 Chih-Hao Tsai 的 MMSeg 算法(http://technology.chtsai.org/mmseg/)實現的中文分詞器,並實現 lucene 的 analyzer 和 solr 的TokenizerFactory 以方便在Lucene和Solr中使用。MMSeg 算法有兩種分詞方法:Simple和Complex,都是基於正向最大匹配。Complex 加了四個規則過慮。官方說:詞語的正確識別率達到了 98.41%。mmseg4j 已經實現了這兩種分詞算法。
imdict-chinese-analyzer:imdict-chinese-analyzer 是 imdict智能詞典 的智能中文分詞模塊,算法基於隱馬爾科夫模型(Hidden Markov Model, HMM),是中國科學院計算技術研究所的ictclas中文分詞程序的從新實現(基於Java),能夠直接爲lucene搜索引擎提供簡體中文分詞支持。
ictclas4j:ICTCLAS4j中文分詞系統是sinboy在中科院張華平和劉羣老師的研製的FreeICTCLAS的基礎上完成的一個java開源分詞項目,簡化了原分詞程序的複雜度,旨在爲廣大的中文分詞愛好者一個更好的學習機會。關於ICTCLAS分詞系統的討論,請訪問google group關於ictclas分詞系統的討論組http://groups.google.com/group/ictclas
ICTCLAS漢語分詞系:http://ictclas.org/
4.solr的配置文件:算法
(1)solr.xml
與整個搜索引擎相關的配置。
(2)solrconfig.xml。
與某個core相關的主要配置,如定義updatehandler用於索引文件,requesthandler用於搜索內容等。
(3)schema.xml
定義了某類型文檔的索引格式。