diff options
| author | Jake Mannens <jake@asger.xyz> | 2023-09-02 14:06:45 +1000 |
|---|---|---|
| committer | Jake Mannens <jake@asger.xyz> | 2023-09-02 14:06:45 +1000 |
| commit | 06c0d323539807b94c6f1f7ca19e459563c7db28 (patch) | |
| tree | 61290d6c9e2047564f9d48aaeb9d3fc5d6dab9a9 /Services/SearchService.cs | |
| parent | d7f0c9365f1c0954de4938c44f7988996a3ca6f7 (diff) | |
Search by filename
Diffstat (limited to 'Services/SearchService.cs')
| -rw-r--r-- | Services/SearchService.cs | 36 |
1 files 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(); + } } |
