2015-03-30 27 views
1

有許多基於分類索引和DocValues使用方面的例子。但是我需要將它們一起用作類別(分類法)和範圍查詢(NumericDocValuesField)的層次結構。 例如DrillSideways:Lucene一起使用分類和DocValues方面

DrillSideways ds = new DrillSideways (searcher, config, taxoReader); 
    DrillSideways.DrillSidewaysResult result = ds.search (q, topScoreDocCollector); 

ds.search的第二個參數()TopScoreDocCollector

FacetsCollector內部ds.search()創建和無法接受此收集器傳遞給ds.search()。通過MultiCollector.wrap(FacetsCollector,TopScoreDocCollector)作爲中的第二個參數ds.search()不正確(?)。然而FacetsCollector需要建立不可用在分類指數方面:

Facets facetsTime = new LongRangeFacetCounts (..., FacetsCollector, ...); 
facetsTime.getTopChildren (...); 

還列出了result.facets包含空值,這是指DocValues方面。

也許你有一個工作的例子,如何在DrillSideways使用分類DocValues方面一起。 謝謝。

回答

2

DrillSideways假設您只使用TaxonomyFacets或SortedSetDocValuesFacets。如果情況並非如此,那麼可以繼承DrillSideways子類並覆蓋buildFacetsResult方法,然後根據需要構建最終的構面。您將獲得DrillDownQuery的FacetsCollector和兩個側向FacetCollectors和暗淡的陣列,用於添加到DrissSideways的每個暗淡。

下面是一個例子:

public class MyDrillSideways extends DrillSideways { 

    public MyDrillSideways(IndexSearcher searcher, FacetsConfig config, TaxonomyReader taxoReader) { 
    super(searcher, config, taxoReader); 
    } 

    @Override 
    protected Facets buildFacetsResult(FacetsCollector drillDowns, FacetsCollector[] drillSideways, String[] drillSidewaysDims) throws IOException { 

    String longRangeFacetDim = "mySpecialLongRangeDim"; 
    Facets drillDownFacets = new FastTaxonomyFacetCounts(taxoReader, config, drillDowns); 

    boolean foundLongRangeInDrillSideways = false; 
    Map<String, Facets> drillSidewaysFacets = new HashMap<>(); 
    if (drillSideways != null) { 
     for (int i = 0; i < drillSideways.length; i++) { 
     String sidewaysDim = drillSidewaysDims[i]; 
     FacetsCollector drillSideway = drillSideways[i]; 

     Facets sidewaysFacets; 
     if (sidewaysDim.equals(longRangeFacetDim)) { 
      foundLongRangeInDrillSideways = true; 
      sidewaysFacets = new LongRangeFacetCounts(...,drillSideway,...); 
     } else { 
      sidewaysFacets = new FastTaxonomyFacetCounts(taxoReader, config, drillSideway); 
     } 
     drillSidewaysFacets.put(sidewaysDim, sidewaysFacets); 
     } 
    } 

    if (!foundLongRangeInDrillSideways) { 
     Facets facetsTime = new LongRangeFacetCounts(..., FacetsCollector, ...); 
     drillSidewaysFacets.put(longRangeFacetDim, facetsTime); 
    } 

    return new MultiFacets(drillSidewaysFacets, drillDownFacets); 
    } 
} 
+0

非常感謝!我試圖理解它是如何工作的:) – rdm 2015-09-02 15:55:25

相關問題