我们正在运行 Solr 3.4,并且有一个相对较小的索引,大约有 90,000 个文档。这些文档分为多个逻辑来源,因此每次搜索都会针对特定来源应用过滤查询,例如:
?q=<query>&fq=source:<source>
wheresource
是一个经典的字符串字段。我们正在使用edismax并有一个默认的搜索字段text。
我们目前看到q=*
平均运行时间比q=*:*
. 差异非常明显,*:*
需要 100 毫秒和*
3500 毫秒。在文档集中搜索一个常用词(匹配所有文档的近 50%)将在 200 毫秒内返回结果。
查看启用了 debugQuery 的查询,我们可以看到它*
被解析为 a DisjunctionMaxQuery((text:*))
,而*:*
被解析为 a MatchAllDocsQuery(*:*)
。这是有道理的,但我仍然不觉得它会导致这种幅度的减速(与匹配 50% 文档的内容相比减速 2000%)。
这可能是什么原因造成的?有什么我们可以调整的吗?