Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr Lucene将分类法和DocValues方面结合使用_Solr_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Lucene_Taxonomy_Facet - Fatal编程技术网 elasticsearch,lucene,taxonomy,facet,Solr,elasticsearch,Lucene,Taxonomy,Facet" /> elasticsearch,lucene,taxonomy,facet,Solr,elasticsearch,Lucene,Taxonomy,Facet" />

Solr Lucene将分类法和DocValues方面结合使用

Solr Lucene将分类法和DocValues方面结合使用,solr,elasticsearch,lucene,taxonomy,facet,Solr,elasticsearch,Lucene,Taxonomy,Facet,有许多基于分类索引和DocValues的方面的使用示例。但我需要同时用作类别(分类法)和范围查询(NumericDocValuesField)的层次结构。 例如,侧钻: DrillSideways ds = new DrillSideways (searcher, config, taxoReader); DrillSideways.DrillSidewaysResult result = ds.search (q, topScoreDocCollector); ds.search()

有许多基于分类索引和DocValues的方面的使用示例。但我需要同时用作类别(分类法)和范围查询(NumericDocValuesField)的层次结构。 例如,侧钻:

  DrillSideways ds = new DrillSideways (searcher, config, taxoReader);
  DrillSideways.DrillSidewaysResult result = ds.search (q, topScoreDocCollector);
ds.search()的第二个参数是TopCoreDocCollector

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

 Facets facetsTime = new LongRangeFacetCounts (..., FacetsCollector, ...);
 facetsTime.getTopChildren (...);
还列出结果。facet包含空值,它指的是DocValues​​小平面


也许您有一个如何使用分类法和DocValues的工作示例​​侧向钻取中的面一起。

侧向钻取
假设您只使用分类面或SortedSetDocValuesFaces。如果不是这样,您可以将drillways子类化,并重写
buildFacetsResult
方法,以按照自己的喜好构建最终的面。您将获得用于DrillDownQuery的FacetCollector和两个带有侧向FacetCollector和dim的数组,用于您添加到DrissSideways的每个dim

以下是一个例子:

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);
  }
}
公共类MyDrillSideways扩展了DrillSideways{
公共MyDrills横向(IndexSearcher搜索器、FacetsConfig配置、TaxonomyReader TaxoreReader){
超级(搜索器、配置、税务阅读器);
}
@凌驾
受保护的Facets buildFacetsResult(FacetsCollector钻取、FacetsCollector[]侧钻、String[]侧钻SDIMS)引发IOException{
字符串longRangeFaceDim=“mySpecialLongRangeDim”;
Facets drillDownFacets=新的FastTaxonomyFaceCounts(taxoReader,配置,深入);
布尔值foundLongRangeInDrillSideways=false;
Map drillSidewaysFacets=新HashMap();
如果(侧钻!=空){
对于(int i=0;i