ツリー構造を説明する分類法インデックスがあります。クエリを実行するときに、複数のカテゴリ(必ずしもツリーの同じレベルにあるとは限りません)のヒット数を取得したいと思います。たとえば、次のパスのリストがあるとします。
[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になります。何が起こっている?
ありがとう。