Solr 自定义查询组件 return 不正确的分面计数

Solr custom query component does not return correct facet counts

我有一个简单的 Solr 查询组件如下:

public class QueryPreprocessingComponent extends QueryComponent implements PluginInfoInitialized {
    
  private static final Logger LOG = LoggerFactory.getLogger( QueryPreprocessingComponent.class );

  private ExactMatchQueryProcessor exactMatchQueryProcessor;

  public void init( PluginInfo info ) {
    initializeProcessors(info);
  }

  private void initializeProcessors(PluginInfo info) {
    List<PluginInfo> queryPreProcessors = info.getChildren("queryPreProcessors")
            .get(0).getChildren("queryPreProcessor");
    for (PluginInfo queryProcessor : queryPreProcessors) {
      initializeProcessor(queryProcessor);
    }
  }

  private void initializeProcessor(PluginInfo queryProcessor) {
    QueryProcessorParam processorName = QueryProcessorParam.valueOf(queryProcessor.name);
    switch(processorName) {
      case ExactMatchQueryProcessor:
        exactMatchQueryProcessor = new ExactMatchQueryProcessor(queryProcessor.initArgs);
        LOG.info("ExactMatchQueryProcessor initialized...");
        break;
      default: throw new AssertionError();
    }
  }

  @Override
  public void prepare( ResponseBuilder rb ) throws IOException
  {
    if (exactMatchQueryProcessor != null) {
      exactMatchQueryProcessor.modifyForExactMatch(rb);
    }
  }

  @Override
  public void process(ResponseBuilder rb) throws IOException
  {
    // do nothing - needed so we don't execute the query here.
    return;
  }

}

除了当我在分布式请求中使用它时,它在功能上按预期工作,它返回的方面计数有问题。它使刻面数加倍。

请注意,我没有在插件中做任何与分面相关的事情。如果引用查询,exactMatchQueryProcessor.modifyForExactMatch(rb); 会进行非常少的处理,否则它什么都不做。即使未引用传入查询,也存在分面计数问题。即使我在 prepare 函数中注释所有内容,问题仍然存在。

请注意,此组件在 solrconfig.xml 中声明为第一个组件。

我通过将 class 扩展为 SearchComponent 而不是 QueryComponent 解决了这个问题。似乎 SearchComponent 比 QueryComponent 处于更高的抽象级别,当您想在分片之上的层上工作时很有用。