1

我有一张Items有约 2 万条记录的表。我需要能够过滤多个标签(或)并维护项目的顺序,sticky然后按创建日期排序。

例如,我可能会获取带有 tagA、tagB 或 tagC 等标签的项目。如果项目是sticky(bool),则首先对其进行排序,然后将其余项目按创建日期排序。

目前我的查询如下所示:

Item.orderBy({ index: r.desc('priority') }) // priority = doc => [doc('sticky'), doc('created').toEpochTime()]
    .filter(row => r.expr(['tagA', 'tagB','tagC']).setIntersection(row('tags')).count().ne(0))
    .slice(offset, offset + limit); // 0 to 10 - pagination

但我觉得这执行了相当多的读取。有没有办法进一步优化它?

我尝试在标签上使用多索引,并且在没有索引的情况下进行常规排序。这似乎减少了读取次数,但速度要慢得多。

4

0 回答 0