summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJake Mannens <jake@asger.xyz>2023-09-02 14:06:45 +1000
committerJake Mannens <jake@asger.xyz>2025-08-20 00:48:44 +1000
commitdbb7a9ef28aefe599bddca62003bbd75711f5805 (patch)
tree8bbe7978ae3b2ea5b1f44c7c91dbd6568abbfaa1
parent259fb4f401c58033c3afdce0fa5571d46a5577b2 (diff)
Search by filename
-rw-r--r--Services/SearchService.cs36
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();
+ }
}