diff options
| -rw-r--r-- | Services/SearchService.cs | 36 | ||||
| -rw-r--r-- | Todo.md | 1 |
2 files changed, 27 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(); + } } @@ -21,6 +21,7 @@ - Keyboard shortcuts - Find source - Collections + - Search memes by audio (for some reason) - Jump into ingest feed at random point - Rating system - Instantaneous OCR processing when media is uploaded |
