2012-10-09 17 views
0

Lucene中,我使用TaxonomyReader來讀取存儲在我的磁盤中的分類的索引。對於一個給定的類別,我需要找到所有的子類別。但是,在Lucene's API我可以找到一種方法來檢索父項,但不是與子項。有一種方法稱爲getChildrenArrays(),它返回一個ChildrenArrays對象。正如你所看到的,這個類只有兩個方法:使用Lucene的TaxonomyReader獲取子項

  • getYoungestChildArray
  • getOlderSiblingArray

我想用這兩種方法來實現Enumerator。有人知道如何去做嗎?

回答

0

我有以下幾點:

private class EnumChildren implements Enumeration<Integer> { 
    int category, current; 
    int[] next, first; 

    public EnumChildren(int category) { 
     ChildrenArrays childrenArrays = tr.getChildrenArrays(); 
     first = childrenArrays.getYoungestChildArray(); 
     next = childrenArrays.getOlderSiblingArray(); 
     current = first[category]; 
    } 

    public boolean hasChildren() { 
     return (current != TaxonomyReader.INVALID_ORDINAL); 
    } 

    @Override 
    public boolean hasMoreElements() { 
     current = next[current]; 
     return (current != TaxonomyReader.INVALID_ORDINAL); 
    } 

    @Override 
    public Integer nextElement() { 
     return current; 
    } 
} 

答案被用作:

ordinal = tr.getOrdinal(new CategoryPath(nodeCategory.getPath(), '/')); 
     EnumChildren childrenEnumeration = new EnumChildren(ordinal); 
     if (childrenEnumeration.hasChildren()) { 
      do { 
       int current = childrenEnumeration.nextElement(); 
       Category child = new Category(tr.getPath(current).toString()); 
       addChildren(child); 
       nodeCategory.children.add(child); 
      } while (childrenEnumeration.hasMoreElements()); 
     }