Solr*与*:*查询性能



我们运行的是Solr 3.4,索引相对较小,约为90000个文档。这些文档被拆分为多个逻辑源,因此每次搜索都会对特定源应用一个过滤查询,例如:

?q=<query>&fq=source:<source>

其中CCD_ 1是经典字符串字段。我们使用edismax,并有一个默认的搜索字段text

我们目前看到q=*的平均运行时间是q=*:*的20倍。差异非常明显,*:*耗时100ms,*耗时3500ms。在文档集中搜索一个常用词(匹配所有文档的近50%)将在不到200ms的时间内返回结果。

查看debugQuery打开的查询,我们可以看到*被解析为DisjunctionMaxQuery((text:*)),而*:*被解析为MatchAllDocsQuery(*:*)。这是有道理的,但我仍然觉得这并不能解释如此严重的放缓(与50%的文档相比,放缓了2000%)。

是什么原因造成的?有什么我们可以调整的吗?

当您只传递source0时,您需要检查字段中的每个值,并将其与*进行匹配,这是一项艰巨的任务。然而,当您使用* : *时,您要求Solr提供所有信息,并跳过任何匹配。

Solr/Lucene经过优化,可以快速高效地执行* : *

相关内容

  • 没有找到相关文章

最新更新