2012-03-05 57 views

回答

1

正如你在FieldCache.java中看到的,有幾種不同的方法來加載fieldcache(getBytes,getInts,getStringIndex,getStrings,...)。這就是爲什麼FieldCacheImpl保持map (type -> cache)

Lucene段是一次寫入,然後是隻讀的,因此您只想加載字段緩存一次,然後始終重新使用同一個實例。 Cache是​​幫助實現這一點的幫助類:它是圍繞map (segment -> map (field -> fieldcache instance))的包裝。 (通過fieldcache例如,我的意思是爲getBytes方法byte[],一個String[]getStrings方法,...)

  • 當段不再使用(如果沒有更加開放讀者使用它) ,您希望GC能夠回收fieldcache,這就是該地圖爲WeakHashMap的原因。

  • 有不同的Cache實現,因爲加載(例如)一個字符串緩存和一個StringIndex緩存(請參閱Cache#createValue(AtomicReader, Entry, boolean))時,邏輯不相同。

+0

非常感謝Adrien。 – jeyaprakash 2012-03-05 10:34:40

+0

嗨Adrien,我可以理解你上面提到的,因爲我現有的版本是Solr 1.3.0,我打算遷移到Solr 3.5,所以如果你能區分兩個版本中的Cache類,將會有很大的幫助? – jeyaprakash 2012-03-05 12:30:15

+0

嗨Adrien,我可以理解你上面提到的,因爲我現有的版本是Solr 1.3.0,我打算遷移到Solr 3.5,所以如果你能在兩個版本中區分Cache類,將會有很大的幫助? – jeyaprakash 2012-03-05 12:40:10