From 4bb6f0dc59cd383dd30b167379ef9ba9ec740309 Mon Sep 17 00:00:00 2001 From: Zack Date: Thu, 9 Apr 2026 00:17:07 +0100 Subject: [PATCH 1/3] fix(server): use word similarity for person name search switch from strict word similarity (%>>) to word similarity (%>) which has a lower default threshold and works better for short search queries Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com> --- server/src/queries/person.repository.sql | 2 +- server/src/repositories/person.repository.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/queries/person.repository.sql b/server/src/queries/person.repository.sql index f60b8859f29df..b9c07a2193c1f 100644 --- a/server/src/queries/person.repository.sql +++ b/server/src/queries/person.repository.sql @@ -201,7 +201,7 @@ from "person" where "person"."ownerId" = $1 - and f_unaccent ("person"."name") %>> f_unaccent ($2) + and f_unaccent ("person"."name") %> f_unaccent ($2) order by f_unaccent ("person"."name") <->>> f_unaccent ($3) limit diff --git a/server/src/repositories/person.repository.ts b/server/src/repositories/person.repository.ts index c1c21162a2d09..be3cf119ff4d9 100644 --- a/server/src/repositories/person.repository.ts +++ b/server/src/repositories/person.repository.ts @@ -313,7 +313,7 @@ export class PersonRepository { .selectFrom('person') .selectAll('person') .where('person.ownerId', '=', userId) - .where(() => sql`f_unaccent("person"."name") %>> f_unaccent(${personName})`) + .where(() => sql`f_unaccent("person"."name") %> f_unaccent(${personName})`) .orderBy(sql`f_unaccent("person"."name") <->>> f_unaccent(${personName})`) .limit(100) .$if(!withHidden, (qb) => qb.where('person.isHidden', '=', false)) From 662907d9d60b817b8709163193c504b263c616af Mon Sep 17 00:00:00 2001 From: mertalev <101130780+mertalev@users.noreply.github.com> Date: Wed, 8 Apr 2026 20:00:57 -0400 Subject: [PATCH 2/3] lower threshold --- server/src/queries/person.repository.sql | 5 +++++ server/src/repositories/person.repository.ts | 3 +++ 2 files changed, 8 insertions(+) diff --git a/server/src/queries/person.repository.sql b/server/src/queries/person.repository.sql index b9c07a2193c1f..6dd21f178dbb0 100644 --- a/server/src/queries/person.repository.sql +++ b/server/src/queries/person.repository.sql @@ -195,6 +195,11 @@ where "asset_face"."id" = $2 -- PersonRepository.getByName +with + "similarity_threshold" as ( + select + set_config('pg_trgm.word_similarity_threshold', '0.5', true) as "thresh" + ) select "person".* from diff --git a/server/src/repositories/person.repository.ts b/server/src/repositories/person.repository.ts index be3cf119ff4d9..41123fe33e45e 100644 --- a/server/src/repositories/person.repository.ts +++ b/server/src/repositories/person.repository.ts @@ -310,6 +310,9 @@ export class PersonRepository { @GenerateSql({ params: [DummyValue.UUID, DummyValue.STRING, { withHidden: true }] }) getByName(userId: string, personName: string, { withHidden }: PersonNameSearchOptions) { return this.db + .with('similarity_threshold', (db) => + db.selectNoFrom(sql`set_config('pg_trgm.word_similarity_threshold', '0.5', true)`.as('thresh')), + ) .selectFrom('person') .selectAll('person') .where('person.ownerId', '=', userId) From 8e9a27b6cbe0319e2ea574132b1ee472dd4b7c06 Mon Sep 17 00:00:00 2001 From: mertalev <101130780+mertalev@users.noreply.github.com> Date: Wed, 8 Apr 2026 20:04:03 -0400 Subject: [PATCH 3/3] force order --- server/src/queries/person.repository.sql | 1 + server/src/repositories/person.repository.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/server/src/queries/person.repository.sql b/server/src/queries/person.repository.sql index 6dd21f178dbb0..318c151cca49e 100644 --- a/server/src/queries/person.repository.sql +++ b/server/src/queries/person.repository.sql @@ -203,6 +203,7 @@ with select "person".* from + "similarity_threshold", "person" where "person"."ownerId" = $1 diff --git a/server/src/repositories/person.repository.ts b/server/src/repositories/person.repository.ts index 41123fe33e45e..ab5fad40d11fc 100644 --- a/server/src/repositories/person.repository.ts +++ b/server/src/repositories/person.repository.ts @@ -313,7 +313,7 @@ export class PersonRepository { .with('similarity_threshold', (db) => db.selectNoFrom(sql`set_config('pg_trgm.word_similarity_threshold', '0.5', true)`.as('thresh')), ) - .selectFrom('person') + .selectFrom(['similarity_threshold', 'person']) .selectAll('person') .where('person.ownerId', '=', userId) .where(() => sql`f_unaccent("person"."name") %> f_unaccent(${personName})`)