【问题标题】:Lucene use taxonomy and DocValues facets togetherLucene 一起使用分类和 DocValues 方面
【发布时间】:2015-03-30 21:09:25
【问题描述】:

有许多基于分类索引和 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.facets 包含空值,它指的是 DocValues 方面。

也许您有一个工作示例,如何在 DrillSideways 中同时使用 taxonomyDocValues 方面。

【问题讨论】:

    标签: solr elasticsearch lucene taxonomy facet


    【解决方案1】:

    DrillSideways 假定您仅使用 TaxonomyFacets 或 SortedSetDocValuesFacets。如果不是这种情况,您可以继承 DrillSideways 并覆盖 buildFacetsResult 方法来构建您喜欢的最终 Facets。您将获得 DrillDownQuery 的 FacetsCollector 和两个带有侧面 FacetCollector 和 dims 的数组,对于您添加到 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);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-11
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 2010-09-14
      • 2012-04-26
      相关资源
      最近更新 更多