随着起始参数越高,对简单索引的SolR查询越来越慢

时间:2015-08-05 08:05:32

标签: performance solr

我正在开发一个包含一百万个文档的简单索引,每个文档包含30个字段。

a q = ,启动值非常低(例如0)只需几毫秒(实际约为1)

起始值越高,最慢的SolR得到......

start=100000  =>  171 ms
start=500000  =>  844 ms
start=1000000 => 1274 ms

我对这种性能下降感到有些惊讶,我担心,因为索引应该在几个月内增长超过一亿份文档。

我可能在架构中出错了吗?或者它是enter code here正常行为,给定切片文档背后的前几百个应该通常不会发生:)

修改

感谢大家的解释 - 我猜这样的东西,但我更喜欢确定这与架构的描述方式无关。所以问题就解决了。

2 个答案:

答案 0 :(得分:0)

每次对solr进行搜索查询时,它都会将所有匹配的文档收集到查询中。然后它跳过文档,直到达到起始值,然后返回结果。

需要注意的另一点是,每次进行相同的搜索查询但具有较高的起始值时,这些文档也不会出现在缓存中,因此它也可能刷新缓存。 (取决于您配置的缓存的大小和类型)

答案 1 :(得分:0)

分页天真地通过检索所有文档直到截止点,扔掉它们,然后获取足够的文档来满足所请求的文档数量然后返回。

如果您要进行深度分页(远远进入数据集),这将变得非常昂贵,the CursorMark support was implemented (see "Fetching A Large Number of Sorted Results: Cursors")可以支持近乎即时的分页到大量文档中。

Yonik也has a good blog post about deep pagination in Solr