01 · Before and afterThe pattern
const opts = { skip: offset, take: limit + 1 }; // one extra row = "has more"
const [byName, byType, byTag] = await Promise.all([q.name(opts), q.type(opts), q.tag(opts)]);
const items = dedupe([...byType, ...byTag, ...byName].map(trim(limit)));
return { items: sortBy(items, 'updatedAt'), hasMore: [byName, byType, byTag].some(p => p.length > limit) };02 · Run it on your appThe check
If your search merges results from several queries, can page 2 still show a match that only the second or third query finds?
If the honest answer is no or not sure, this is worth a look before it reaches production.