Solr自定义查询组件没有返回正确的facet计数



我有一个简单的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;
}
}

这工作如预期的功能,除了当我在一个分布式请求中使用它,它有一个问题与facet计数返回。它使facet计数加倍。

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

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

我通过将类扩展到SearchComponent而不是QueryComponent来解决此问题。似乎SearchComponent比QueryComponent处于更高的抽象层次,当你想在分片之上的层上工作时,它是有用的。

相关内容

  • 没有找到相关文章

最新更新