2

ツリー構造を説明する分類法インデックスがあります。クエリを実行するときに、複数のカテゴリ(必ずしもツリーの同じレベルにあるとは限りません)のヒット数を取得したいと思います。たとえば、次のパスのリストがあるとします。

[Root/Cat1, Root/Cat1/Cat12, Root/Cat3]

これら3つのカテゴリのそれぞれのヒット数を取得したいと思います。

私は解決策を探していましたが、ツリーリクエストを作成し、呼び出すことで結果を取得できることを知っています( API.getSubResults()で説明されています)。しかし、私は例を見つけられず、それを実装する方法を本当に知りません。これまでのところ、私は次のことをしなければなりません:

    // Build query
    Query query = extendQuery(queryGenerator.generateQuery(resource));

    // Set the number of top results        
    TopScoreDocCollector tdc = TopScoreDocCollector.create(numTopDocuments, true);

    // Set a faceted search
    FacetSearchParams facetSearchParams = new FacetSearchParams();

    // Search at level of the category in interests     
    CountFacetRequest facetRequest = new CountFacetRequest(new CategoryPath("Top", '/'), numTopCategories);

    facetRequest.setResultMode(ResultMode.PER_NODE_IN_TREE);

    facetSearchParams.addFacetRequest(facetRequest);                    

    // To collect the number of hits per facet
    FacetsCollector facetsCollector = 
            new FacetsCollector(facetSearchParams, documentReader, taxonomyReader);
    try {
        // Collect the number of hits per facet
        documentSearcher
                .search(query, MultiCollector.wrap(tdc, facetsCollector));                          
        for (FacetResult res : facetsCollector.getFacetResults()){
            //this is the top lvl facet
              FacetResultNode toplvl = res.getFacetResultNode();
              System.out.println(toplvl.getLabel() + " (" + toplvl.getValue() + ")");
              for (FacetResultNode secondlvl : toplvl.getSubResults()) {
                  //second lvl facet categories
                  System.out.println("  " + secondlvl.getLabel().getComponent(1) 
                                + " (" + secondlvl.getValue() + ")");
                  for (FacetResultNode thirdlvl : secondlvl.getSubResults()) {
                      //second lvl facet categories
                      System.out.println("  " + thirdlvl.getLabel().getComponent(2) 
                                    + " (" + thirdlvl.getValue() + ")");
                  }
              }
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

ただし、3番目のレベルに到達すると、nullになります。何が起こっている?

ありがとう。

4

1 に答える 1

1

以下も設定する必要があります。

facetRequest.setDepth(MAX_DEPTH_TREE);
于 2013-02-13T14:59:57.503 に答える