feat(server): add /search/statistics resource (#18885)

This commit is contained in:
Jonathan Gilbert
2025-06-07 11:12:53 +10:00
committed by GitHub
parent ecb16d9907
commit fb4be6e231
14 changed files with 954 additions and 16 deletions

View File

@@ -185,6 +185,7 @@ export class SearchRepository {
async searchMetadata(pagination: SearchPaginationOptions, options: AssetSearchOptions) {
const orderDirection = (options.orderDirection?.toLowerCase() || 'desc') as OrderByDirection;
const items = await searchAssetBuilder(this.db, options)
.selectAll('assets')
.orderBy('assets.fileCreatedAt', orderDirection)
.limit(pagination.size + 1)
.offset((pagination.page - 1) * pagination.size)
@@ -193,6 +194,22 @@ export class SearchRepository {
return paginationHelper(items, pagination.size);
}
@GenerateSql({
params: [
{
takenAfter: DummyValue.DATE,
lensModel: DummyValue.STRING,
isFavorite: true,
userIds: [DummyValue.UUID],
},
],
})
searchStatistics(options: AssetSearchOptions) {
return searchAssetBuilder(this.db, options)
.select((qb) => qb.fn.countAll<number>().as('total'))
.executeTakeFirstOrThrow();
}
@GenerateSql({
params: [
100,
@@ -209,10 +226,12 @@ export class SearchRepository {
const uuid = randomUUID();
const builder = searchAssetBuilder(this.db, options);
const lessThan = builder
.selectAll('assets')
.where('assets.id', '<', uuid)
.orderBy(sql`random()`)
.limit(size);
const greaterThan = builder
.selectAll('assets')
.where('assets.id', '>', uuid)
.orderBy(sql`random()`)
.limit(size);
@@ -241,6 +260,7 @@ export class SearchRepository {
return this.db.transaction().execute(async (trx) => {
await sql`set local vchordrq.probes = ${sql.lit(probes[VectorIndex.CLIP])}`.execute(trx);
const items = await searchAssetBuilder(trx, options)
.selectAll('assets')
.innerJoin('smart_search', 'assets.id', 'smart_search.assetId')
.orderBy(sql`smart_search.embedding <=> ${options.embedding}`)
.limit(pagination.size + 1)