2

我们正在运行 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%)。

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

4

1 回答 1

2

当您只是通过时,*您正在下令检查该字段中的每个值并将其匹配,这*需要做很多事情。但是,当您使用时,* : *您要求 Solr 为您提供所有内容并跳过任何匹配。

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

于 2012-01-10T09:39:49.483 回答