当前位置: 首页 > 面试题库 >

Lucene同时使用分类法和DocValues方面

西门骁
2023-03-14
问题内容

有许多基于分类索引和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
。对于您添加到DrissSideways中的每个暗角,您将获得用于DrillDownQuery的FacetsCollector和两个带有侧面FacetCollectors和暗角的数组。

这是一个例子:

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);
  }
}


 类似资料:
  • 我正计划尝试Solr的docValues来改进方面和排序性能。围绕这个特性,我有一些问题: 如果启用docValues,除了单独的反向索引(用于搜索)之外,Solr还会创建一个前向索引(用于刻面)吗?或者Solr仅仅创建一个前向索引?(从而导致分面时的性能增加,以换取搜索时的性能损失) 如果我想同时在一个字段中进行刻面和搜索,最好的做法是什么?我应该在同一个字段中设置“indexed=true”和

  • 问题内容: 在Python中,我希望能够创建一个既充当类函数又充当实例方法的函数,但是具有更改行为的能力。用例是针对一组可序列化的对象和类型。举个例子: 我知道给定Python源中funcobject.c中classmethod()的定义,这看起来像使用C模块一样简单。有没有办法从python内部执行此操作? 谢谢! 有了描述符的提示,我可以使用以下代码来做到这一点: 谢谢亚历克斯! 问题答案:

  • 我在阅读oracle的多线程官方教程时,遇到了这个例子(假设< code>c1和< code>c2从未一起使用): 据说通过使用锁1 然而,我并不认为这有助于减少阻塞,因为它们彼此之间没有依赖关系。我有多个线程同时运行这两个方法,当我使用lock对象和this关键字时,性能非常相似。 有人可以帮助解释我的困惑吗?喜欢用一个例子来说明差异。 除了这里的讨论,这篇文章也帮助澄清了我的疑虑。要点:将sy

  • 本文向大家介绍C#中分部方法和分部类分析,包括了C#中分部方法和分部类分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了C#中分部方法和分部类。分享给大家供大家参考。 具体代码如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 我知道ElasticSearch是基于Apache Lucene构建的,但我想知道两者之间的显著差异。

  • Lucene默认的打分算法 当谈论到查询的相关性,很重要的一件事就是对于给定的查询语句,如何计算文档得分。首先要弄清楚的是文档得分是什么。文档得分是一个用来描述查询语句和文档之间匹配程度的变量。在本节,我们将学习Lucene默认的打分机制:TF/IDF(term frequency/inverse document frequecy)算法,以及它是如何对相关文档进行打分排序。理解默认的打分算法对设