我正在开发一个包含一百万个文档的简单索引,每个文档包含30个字段。
a q = :,启动值非常低(例如0)只需几毫秒(实际约为1)
起始值越高,最慢的SolR得到......
start=100000 => 171 ms
start=500000 => 844 ms
start=1000000 => 1274 ms
我对这种性能下降感到有些惊讶,我担心,因为索引应该在几个月内增长超过一亿份文档。
我可能在架构中出错了吗?或者它是enter code here
正常行为,给定切片文档背后的前几百个应该通常不会发生:)
修改
感谢大家的解释 - 我猜这样的东西,但我更喜欢确定这与架构的描述方式无关。所以问题就解决了。
答案 0 :(得分:0)
每次对solr进行搜索查询时,它都会将所有匹配的文档收集到查询中。然后它跳过文档,直到达到起始值,然后返回结果。
需要注意的另一点是,每次进行相同的搜索查询但具有较高的起始值时,这些文档也不会出现在缓存中,因此它也可能刷新缓存。 (取决于您配置的缓存的大小和类型)
答案 1 :(得分:0)
分页天真地通过检索所有文档直到截止点,扔掉它们,然后获取足够的文档来满足所请求的文档数量然后返回。
如果您要进行深度分页(远远进入数据集),这将变得非常昂贵,the CursorMark support was implemented (see "Fetching A Large Number of Sorted Results: Cursors")可以支持近乎即时的分页到大量文档中。