0

ではLucene、 を使用してTaxonomyReader、ディスクに保存されている分類法のインデックスを読み取ります。特定のカテゴリについて、その子であるすべてのカテゴリを見つける必要があります。ただし、Lucene の APIでは、親を取得する方法を見つけることができましたが、子を取得する方法は見つかりませんでした。ChildrenArraysオブジェクトgetChildrenArrays()を返すメソッドが呼び出されます。ご覧のとおり、このクラスには 2 つのメソッドしかありません。

  • getYoungestChildArray
  • getOlderSiblingArray

Enumeratorこの2つの方法で実装したいと思います。誰かがそれを行う方法を知っていますか?

4

1 に答える 1

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;
    }
}

Ans は次のように使用されます。

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());
        }
于 2012-10-09T16:52:33.560 に答える