From dbb7a9ef28aefe599bddca62003bbd75711f5805 Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Sat, 2 Sep 2023 14:06:45 +1000 Subject: Search by filename --- Services/SearchService.cs | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/Services/SearchService.cs b/Services/SearchService.cs index bb2963d..2e097e3 100644 --- a/Services/SearchService.cs +++ b/Services/SearchService.cs @@ -25,6 +25,7 @@ public class SearchService : ISearchService { query = query.ToLower(); int[] descriptionResults = SearchDescription(query); + int[] filenameResults = SearchFilenames(query); int[] ocrResults = SearchOcr(query); var matchedTag = db.TagDefinitions @@ -47,6 +48,7 @@ public class SearchService : ISearchService { int[] tagResults = SearchTags(tags); int[] mediaIds = descriptionResults + .Union(filenameResults) .Union(ocrResults) .Union(tagResults) .OrderDescending() @@ -59,28 +61,29 @@ public class SearchService : ISearchService { } // TODO: Make asynchronous - private int[] SearchTags(int[] tags) { + private int[] SearchDescription(string query) { return Task.Run(() => { using var db = dbFactory.CreateDbContext(); + query = query.ToLower(); return db.Media - .Include(m => m.Tags) - .AsEnumerable() - .Where(m => m.Tags.IntersectBy(tags, t => t.TagDefinitionId).Any()) + .Where(m => + (m.ShortDescription != null && m.ShortDescription.ToLower().Contains(query)) || + (m.LongDescription != null && m.LongDescription.ToLower().Contains(query))) .Select(m => m.ObjectId) .ToArray(); }).GetAwaiter().GetResult(); } // TODO: Make asynchronous - private int[] SearchDescription(string query) { + private int[] SearchFilenames(string query) { return Task.Run(() => { using var db = dbFactory.CreateDbContext(); query = query.ToLower(); - return db.Media - .Where(m => - (m.ShortDescription != null && m.ShortDescription.ToLower().Contains(query)) || - (m.LongDescription != null && m.LongDescription.ToLower().Contains(query))) - .Select(m => m.ObjectId) + return db.UploadedFiles + .Include(uf => uf.Media) + .Where(uf => uf.Filename != null && uf.Filename.ToLower().Contains(query)) + .Select(uf => uf.Media.ObjectId) + .Distinct() .ToArray(); }).GetAwaiter().GetResult(); } @@ -97,4 +100,17 @@ public class SearchService : ISearchService { .ToArray(); }).GetAwaiter().GetResult(); } + + // TODO: Make asynchronous + private int[] SearchTags(int[] tags) { + return Task.Run(() => { + using var db = dbFactory.CreateDbContext(); + return db.Media + .Include(m => m.Tags) + .AsEnumerable() + .Where(m => m.Tags.IntersectBy(tags, t => t.TagDefinitionId).Any()) + .Select(m => m.ObjectId) + .ToArray(); + }).GetAwaiter().GetResult(); + } } -- cgit v1.3