繁体   English   中英

Lucene一起使用分类法和DocValues方面

[英]Lucene use taxonomy and DocValues facets together

有许多基于分类索引和DocValues使用构面的示例。 但我需要将类别(分类法)和范围查询(NumericDocValuesField)一起用作层次结构。 例如DrillSideways:

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

ds.search()的第二个参数是TopScoreDocCollector

FacetsCollectords.search()内部创建,因此无法将此收集器传递给ds.search() 传递MultiCollector.wrap(FacetsCollector,TopScoreDocCollector)作为ds.search()中的第二个参数不正确(?)。 但是, FacetsCollector需要构建分类索引中不可用的构面:

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

还列出result.facet包含null值,该值引用DocValues facet。

也许您有一个可行的示例,如何在DrillSideways中一起使用分类法DocValues方面。

DrillSideways假定您仅使用TaxonomyFacets或SortedSetDocValuesFacets。 如果不是这种情况,则可以对DrillSideways进行子类化,并覆盖buildFacetsResult方法以构建最终的Facet(如果您愿意)。 您将获得用于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);
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM