LetsCoding.cn

          天地之間有桿秤,拿秤砣砸老百姓。

          Lucene源碼分析筆記之[org.apache.lucene.document](四)

          綜述:文檔(Document由字段組成(Field),字段由字段名(name)和內(nèi)容(fieldsDate)組成。

          Field類系

          1.Field類系層次圖
           

          2.部分代碼及說明

          Fieldable接口

          Fieldable定義了如下的一系列的方法聲明,這些方法在AbstractFieldField中得以實現(xiàn)。

           1void setBoost(float boost); // boost因子
           2float getBoost();
           3String name();    // 字段名
           4public String stringValue();    // 以String的形式字段內(nèi)容
           5public Reader readerValue();    // 以Reader的形式返回字段內(nèi)容
           6public byte[] binaryValue();    // 以byte[]的形式返回字段內(nèi)容
           7public TokenStream tokenStreamValue();    // 以TokenStream的形式返回字段內(nèi)容
           8boolean isStored();    // 返回該字段是否存儲
           9boolean isIndexed();    // 返回該字段是否被索引
          10boolean isTokenized();    // 返回該字段是否被分詞
          11boolean isCompressed();    // 返回該字段是否壓縮存儲
          12boolean isTermVectorStored();    // 用于索引此字段的terms是否以term vector保存
          13boolean isStoreOffsetWithTermVector();    // 是否保存該字段term的偏移信息(tvf)
          14boolean isStorePositionWithTermVector();    // 是否保存該字段term的位置信息(tvf)
          15boolean getOmitNorms();
          16void setOmitNorms(boolean omitNorms);
          17boolean isLazy();    // 返回該字段內(nèi)容是否滯后加載


          AbstractField

          AbstractField為一抽象類,它實現(xiàn)了Fieldable中的部分方法。也定義了一系列變量用來表示該Field所包含的數(shù)據(jù)及對此數(shù)據(jù)的處理方式。

           1    protected String name = "body"// Field名,默認為body
           2    protected boolean storeTermVector = false;    // 是否保存字段的term vector
           3    protected boolean storeOffsetWithTermVector = false;    // term偏移信息
           4    protected boolean storePositionWithTermVector = false;    // term位置信息
           5    protected boolean omitNorms = false// 是否省略標準????
           6    protected boolean isStored = false// 是否存儲
           7    protected boolean isIndexed = true// 是否索引
           8    protected boolean isTokenized = true// 是否分詞
           9    protected boolean isBinary = false;    // 是否二進制保存
          10    protected boolean isCompressed = false// 是否壓縮存儲
          11    protected boolean lazy = false// 是否滯后加載
          12    protected float boost = 1.0f// boost因子
          13    // the one and only data object for all different kind of field values
          14    protected Object fieldsData = null// Field內(nèi)容


          Field

          Field為具體子類,實現(xiàn)了接口Fieldable中的所有方法。另外,它還定義了3個內(nèi)部類,Field.Store, Field.Index,Field.TermVector用來說明在索引是對該字段的處理方式。

          Field.Store:是否存儲此Field

          Field.Index:是否索引此Field

          Field.TermVector:此Field是否擁有及如何存儲term vectors



          FieldSelector
          類系

          1FieldSelector類系層次圖

          3.部分代碼及說明

          FieldSelectoResult接口

          FieldSelector接口只提供了一個accept(fieldName)方法,用來返回文檔的字段在文檔被讀取時的載入方式;而FieldSelectorResult則是字段載入方式的集合類:

           1public transient static final FieldSelectorResult LOAD = new FieldSelectorResult(
           2            0);    // 立即載入
           3public transient static final FieldSelectorResult LAZY_LOAD = new FieldSelectorResult(
           4            1);        // 滯后載入
           5public transient static final FieldSelectorResult NO_LOAD = new FieldSelectorResult(
           6            2);        // 不載入字段內(nèi)容
           7public transient static final FieldSelectorResult LOAD_AND_BREAK = new FieldSelectorResult(
           8            3);        // 載入部分字段并終止載入
           9public transient static final FieldSelectorResult LOAD_FOR_MERGE = new FieldSelectorResult(
          10            4);        // 立即載入,但不解壓被壓縮過的內(nèi)容
          11public transient static final FieldSelectorResult SIZE = new FieldSelectorResult(
          12            5);        // 只載入字段大小
          13public transient static final FieldSelectorResult SIZE_AND_BREAK = new FieldSelectorResult(
          14            6);        // 載入字段大小并立即終止載入
          15

           

          LoadFirstFieldSelector

          LoadFirstFieldSelector最簡單的一個FieldSelector實現(xiàn)類,該選擇器類說明字段(accept()方法中的參數(shù)指定的字段)內(nèi)容被載入后,立即終止文檔的載入過程。

          1    public FieldSelectorResult accept(String fieldName) {
          2        return FieldSelectorResult.LOAD_AND_BREAK;
          3    }

           

          MapFieldSelector

          MapFieldSelector用來說明哪些字段內(nèi)容被載入,哪些字段內(nèi)容不被載入。它定義了一個Map類型的變量:fieldSelections,在此Map查的到的字段將被載入,反之將不被載入。

          1    public FieldSelectorResult accept(String field) {
          2        FieldSelectorResult selection = (FieldSelectorResult) fieldSelections
          3                .get(field);
          4        return selection != null ? selection : FieldSelectorResult.NO_LOAD;
          5    }


          SetBasedFieldSelector類

          SetBasedFieldSelector用來說明哪些字段內(nèi)容將被立即載入,哪些字段將被滯后載入。

           1    private Set fieldsToLoad;    // 立即載入字段集合
           2    private Set lazyFieldsToLoad;    // 滯后載入字段集合
           3
           4    public FieldSelectorResult accept(String fieldName) {
           5        FieldSelectorResult result = FieldSelectorResult.NO_LOAD;
           6        if (fieldsToLoad.contains(fieldName) == true{
           7            result = FieldSelectorResult.LOAD;
           8        }

           9        if (lazyFieldsToLoad.contains(fieldName) == true{
          10            result = FieldSelectorResult.LAZY_LOAD;
          11        }

          12        return result;
          13    }

           

          Document

          文檔是索引和搜索的單位,它由一組字段構(gòu)成。每個字段都有字段名跟字段內(nèi)容。字段有可能跟文檔一起被保存下來,這樣在文檔被搜索到時就會同時返回該字段的內(nèi)容。因此,文檔需要保存一個或多個字段來與其他文檔相區(qū)別。

          posted on 2008-12-02 12:01 Rolandz 閱讀(2349) 評論(3)  編輯  收藏

          評論

          # re: Lucene源碼分析筆記之[org.apache.lucene.document](四) 2009-03-30 14:06 koala++

          寫的不錯呀,為什么不再寫下去了呢?  回復  更多評論   

          # re: Lucene源碼分析筆記之[org.apache.lucene.document](四) 2009-10-21 20:10 ggggggggg

          寫的非常好,我不頂不行.....  回復  更多評論   

          # re: Lucene源碼分析筆記之[org.apache.lucene.document](四) 2009-11-11 15:53 afdsafds

          是不是延遲加載是不是只能查看不能設置呀?請問有辦法設置加載方式嗎?  回復  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           

          導航

          統(tǒng)計

          留言簿(1)

          隨筆分類(12)

          隨筆檔案(19)

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 海淀区| 黄陵县| 弥渡县| 宁国市| 临夏县| 许昌市| 呼图壁县| 莒南县| 曲水县| 宽城| 木里| 锡林浩特市| 东安县| 连州市| 海南省| 惠州市| 邵东县| 资溪县| 莱州市| 长宁区| 鄂伦春自治旗| 泗阳县| 马边| 始兴县| 双城市| 毕节市| 明光市| 疏附县| 弋阳县| 吴忠市| 嘉禾县| 忻州市| 洛阳市| 白沙| 滨州市| 榆林市| 门头沟区| 台前县| 娄底市| 垫江县| 遵化市|