初次接觸solr,對其中的許多概念都模糊不清,經常是看過了轉眼就忘記了,因此在這裏整理一下常用的概念。數據庫
Core是一個單一的索引數據,而一個索引由多個Document組成,這些Document是扁平化的,即兩個Document的域徹底不一樣。數組
Solr 設計多Core主要是爲了解決生產環境下的以下關鍵需求:緩存
表示是否須要建立索引,便是否須要添加到倒排索引表中,通常用來修飾Field域的,若是你不對某個域建立索引,那麼意味着你將不能根據改域的域值進行全文檢索。數據結構
表示是否須要存儲某個域的域值,通常表示是否須要將域值寫入到磁盤上進行持久化,持久化的目的是爲了查詢的時候能再次獲取返回給用戶作展現。固然存儲則意味着會增長索引文件的體積。若是你的索引目錄是基於內存的,那Stored設置true仍是false都沒什麼意義。性能
表示是否須要對某個域的域值進行分詞操做,若是你設置爲不分詞,那麼會把域值所有內容看成一個Term存入倒排索引表。翻譯
即Normalization的縮寫,翻譯過來就是標準化的意思。這裏表示是Lucene評分機制裏的標準化因子,使用標準化因子來影響文檔的最終評分。設計
用於表示指定Field是不是一個多值域。咱們知道,域值通常是單個值,但有時候可能咱們的域值是一個List集合或者一個數組,這時候該如何處理域值創建索引呢?爲了解決這個問題,因此設計了多值域。orm
表示是否對指定Field啓用空間向量模型,當你須要使用FastVector-Hightlighter高亮器或者MoreLikeThis功能時,你就須要啓用 termVectors。xml
表示是否記錄Field的域值中的每一個Term的位置信息即記錄當前是文檔中的第幾個term,前提是你必需要先啓動termVectors。排序
表示記錄Field的域值中的每一個Term的位置偏移量,所謂偏移量,其實就是Term在文檔中的起始位置和結束位置,都是從零開始計算。好比I like Java這個字符串,其中單詞Java的位置偏移量就是[7,10]。
表示當前Term的位置與前一個term的位置之間的差值即位置增量,好比I like the girl with short hair(是的!!),這裏girl與like之間的位置增量爲2,由於like的position=1,girl的position=3。但若是考慮停用詞的狀況,嗎麼like和girl之間的the是停用詞,the會被剔除掉,此時girl與like之間的位置增量爲1。加入兩個term之間的positionincrement=0,那麼說明兩個Term處於文檔中同一個位置,利用這個特性能夠實現同義詞功能。
表示兩個Term之間的間隙,這是Solr Schema.xml裏field的配置屬性,通常用於解決多值域查詢phrase query的。好比你有個多值域,它有2個域值:author:John Doe;author:Bob Smith。對於多值域而言,默認PositoinIncrementGap=0,也就意味着默認多值域的域值是直接拼接在一塊兒的,即john doe bob smith,也就是說若是你輸入doe bob也是能夠搜索到該文檔的,若是你不但願用戶輸入doe bob能搜索到,那麼你能夠設置PositionIncrementGap=N,N是讓任意一個大於零的整數便可,這樣用戶就不能跨多個域值搜索了,只能在多值域的單個域值內實現關鍵字搜索了。
通常用於數字域的範圍查詢,默認值是4,調整這個屬性值能夠提高數字域的查詢性能。
Lucene索引的存儲方式通常都是以倒排索引的方式(term-doc),即Term到Document的一個映射。可是在搜索相關功能處理的時候,如排序、高亮,須要經過文檔docid找到相應的term值、term的位置信息等。爲此,在Lucene4.0中,引入了一個新字段類型DocValue,即在索引的時候創建文檔到值(document-to-value)的映射。這個方法保證減輕了一些字段緩存的內存要求,而且使得Sorting、Faceting、Grouping、Fuction Query的響應速度更快。但開啓DocValues須要額外保存索引信息,所以會增大索引體積。
DocValues只適用於部分FieldType,這些FieldType底層實際又是使用的Lucene的DocValues Type。DocValues適用的FieldType以下:
DocValues的優缺點
所謂payload其實就是提供用戶傳入一個額外的自定義信息,而該信息能夠干預文檔最終的評分。Payload信息跟term的位置(positions)信息同樣,都是存儲在倒排索引表中的,存儲它會額外增大索引體積。