Skip to content

Commit c8dab20

Browse files
committed
Improved performance for artist search queries
1 parent 853ee49 commit c8dab20

6 files changed

Lines changed: 45 additions & 10 deletions

File tree

MiniMediaMetadataAPI.Application/Repositories/DeezerRepository.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,14 @@ public DeezerRepository(IOptions<DatabaseConfiguration> databaseConfiguration)
2020
SELECT *
2121
FROM deezer_artist da
2222
JOIN deezer_artist_image_link dai ON dai.artistid = da.artistid
23-
where lower(da.name) % lower(@name)";
23+
24+
WHERE CASE
25+
WHEN array_length(show_trgm(lower(@name)), 1) IS NULL THEN false
26+
ELSE lower(da.name) % lower(@name)
27+
END
28+
29+
ORDER BY similarity(lower(da.name), lower(@name)) DESC
30+
limit 500";
2431

2532
await using var conn = new NpgsqlConnection(_databaseConfiguration.ConnectionString);
2633
await conn.OpenAsync();

MiniMediaMetadataAPI.Application/Repositories/DiscogsRepository.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,13 @@ public DiscogsRepository(IOptions<DatabaseConfiguration> databaseConfiguration)
1919
string query = @"SET LOCAL pg_trgm.similarity_threshold = 0.5;
2020
SELECT da.artistid, regexp_replace(da.name, ' \([0-9]*\)$', '' ) as name, da.realname, da.profile, da.dataquality, da.lastsynctime
2121
FROM discogs_artist da
22-
where lower(da.name) % lower(@name)";
22+
WHERE CASE
23+
WHEN array_length(show_trgm(lower(@name)), 1) IS NULL THEN false
24+
ELSE lower(da.name) % lower(@name)
25+
END
26+
27+
ORDER BY similarity(lower(da.name), lower(@name)) DESC
28+
limit 500";
2329

2430
await using var conn = new NpgsqlConnection(_databaseConfiguration.ConnectionString);
2531
await conn.OpenAsync();

MiniMediaMetadataAPI.Application/Repositories/MusicBrainzRepository.cs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,15 @@ public MusicBrainzRepository(IOptions<DatabaseConfiguration> databaseConfigurati
1717
public async Task<List<MusicBrainzArtistModel>?> SearchArtistAsync(string name, int offset)
1818
{
1919
string query = @"SET LOCAL pg_trgm.similarity_threshold = 0.5;
20-
SELECT *
21-
FROM MusicBrainz_Artist
22-
where
23-
lower(name) % lower(@name)
24-
or lower(sortname) % lower(@name)";
20+
SELECT ma.*
21+
FROM MusicBrainz_Artist ma
22+
WHERE CASE
23+
WHEN array_length(show_trgm(lower(@name)), 1) IS NULL THEN false
24+
ELSE lower(ma.name) % lower(@name)
25+
or lower(ma.sortname) % lower(@name)
26+
end
27+
ORDER BY similarity(lower(ma.name), lower(@name)) DESC
28+
limit 100";
2529

2630
await using var conn = new NpgsqlConnection(_databaseConfiguration.ConnectionString);
2731
await conn.OpenAsync();

MiniMediaMetadataAPI.Application/Repositories/SoundCloudRepository.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,13 @@ public SoundCloudRepository(IOptions<DatabaseConfiguration> databaseConfiguratio
2020
string query = @"SET LOCAL pg_trgm.similarity_threshold = 0.5;
2121
SELECT *
2222
FROM soundcloud_user su
23-
where lower(su.title) % lower(@name)";
23+
WHERE CASE
24+
WHEN array_length(show_trgm(lower(@name)), 1) IS NULL THEN false
25+
ELSE lower(su.title) % lower(@name)
26+
END
27+
28+
ORDER BY similarity(lower(su.title), lower(@name)) DESC
29+
limit 100";
2430

2531
await using var conn = new NpgsqlConnection(_databaseConfiguration.ConnectionString);
2632
await conn.OpenAsync();

MiniMediaMetadataAPI.Application/Repositories/SpotifyRepository.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,13 @@ public SpotifyRepository(IOptions<DatabaseConfiguration> databaseConfiguration)
2020
SELECT *
2121
FROM spotify_artist sa
2222
left join spotify_artist_image sai on sai.artistid = sa.id
23-
where lower(sa.name) % lower(@name)";
23+
WHERE CASE
24+
WHEN array_length(show_trgm(lower(@name)), 1) IS NULL THEN false
25+
ELSE lower(sa.name) % lower(@name)
26+
END
27+
28+
ORDER BY similarity(lower(sa.name), lower(@name)) DESC
29+
limit 500";
2430

2531
await using var conn = new NpgsqlConnection(_databaseConfiguration.ConnectionString);
2632
await conn.OpenAsync();

MiniMediaMetadataAPI.Application/Repositories/TidalRepository.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,13 @@ public TidalRepository(IOptions<DatabaseConfiguration> databaseConfiguration)
2020
SELECT *
2121
FROM tidal_artist ta
2222
left join tidal_artist_image_link tai on tai.artistid = ta.artistid
23-
where lower(ta.name) % lower(@name)";
23+
WHERE CASE
24+
WHEN array_length(show_trgm(lower(@name)), 1) IS NULL THEN false
25+
ELSE lower(ta.name) % lower(@name)
26+
END
27+
28+
ORDER BY similarity(lower(ta.name), lower(@name)) DESC
29+
limit 500";
2430

2531
await using var conn = new NpgsqlConnection(_databaseConfiguration.ConnectionString);
2632
await conn.OpenAsync();

0 commit comments

Comments
 (0)