上一篇文章已經講解了如何部署Solr,部署是部署完了,但是總以爲內心空空的,沒底,裏面有N多配置文件,好比schema.xml、solrConfig.xml、solr.xml and so on……都不知道他們是來幹嗎的,因此要先了解下總體的項目架構、基本原理,才能在後續的工做中,更加熟練,須知挨踢行業,必須求甚解。之前不論是上學,仍是作其餘事情,都是在沒有了解其原理的基礎上就開工,致使了似懂非懂的一種狀態,這種狀況就是在現有的範圍、環境下能夠應付得來,可是若是環境一變,那就一籌莫展了。正所謂磨刀不誤砍柴工,因此,必須瞭解下基本原理,才能更好的在路上。數據庫
如下是一些Solr的項目結構、配置文件的講解:架構
做者講解了Solr Core、schema.xml、solrConfig.xml文件的含義,以MySql來作對比,這樣更加通俗易懂,好比solr的core就至關於數據庫,schema.xml至關於表等等spa
http://www.ecmkit.com/zh-hans/taxonomy/term/287.net
schema.xml的結構比較簡單,主要分爲2 部分types和fields。types部分定義了字段類型的定義信息,好比int,string等;而在fields部分則定義了Solr將會存儲哪些信息,fields內的字段是根據你的業務需求來定義的。types和fields的關係其實也很明顯,就是types被fields所引用。舉例來講,fields內定義了,該字段的類型是string,而string類型的定義就是在types中定義的。orm
咱們知道<types>內定義了一些數據類型,這些數據類型會被<fields>引用。就先來看一個常見的定義:<fieldType name="int" class="solr.TrieIntField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>。很明顯這是一個數值類型的定義,在solr中,數值類型包括int, float, long, double以及日期類型(date),而對於這些數值類型,基本上都是用Trie開始的類型,例如"solr.TrieFloatField","solr.TrieDateField"等。Trie開始的類型能知足你至少95%以上的需求,所以除非有特殊理由,否則仍是老老實實用Trie開始的類型吧。xml
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> <filter/> </analyzer> </fieldType>
首先應該注意到有2個analyzer。一個是index,另一個是query。也就是說<analyzer type="index">是用在index階段,而<analyzer type="query">用在查詢階段—你所輸入的查詢內容也是須要經過分析最終產生token,而後和index裏的token匹配。blog
<tokenizer class="solr.StandardTokenizerFactory"/>固然就是對應分析鏈中的起點Tokenizer。接下來串聯了2個filter,分別是solr.StopFilterFactory,solr.LowerCaseFilterFactory。stop word filter就是把那些the, of, on之類的詞從token中去除掉,因爲這類詞在文檔中出現的頻率很是高,而對文檔的特徵又沒什麼影響,因此這類詞對查詢沒什麼意義。Lower case filter的做用是將全部的token轉換成小寫,也就是在最終的index中保存的都是小寫。token
如下還有一篇關於schema.xml文件配置的詳細解釋,贊一個:ci
http://blog.csdn.net/liuweitoo/article/details/8137124rem
在路上……