From 652a5a558b4b7f811a1a6d433191d16067908898 Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Fri, 25 Aug 2023 02:38:38 +1000 Subject: Improved search engine --- Services/SearchService.cs | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) (limited to 'Services/SearchService.cs') diff --git a/Services/SearchService.cs b/Services/SearchService.cs index cebc704..8a109ea 100644 --- a/Services/SearchService.cs +++ b/Services/SearchService.cs @@ -19,20 +19,28 @@ public class SearchService : ISearchService { var matchedTag = db.TagDefinitions .FirstOrDefault(td => td.Name.ToLower() == query)?.Guid; - if(matchedTag is not null) - return db.Media - .Include(m => m.Tags) - .ThenInclude(t => t.TagDefinition) - .Where(m => m.Tags - .Select(t => t.TagDefinition) - .Select(td => td.Guid) - .Contains((Guid) matchedTag)) - .ToArray(); - var matchingTags = db.TagDefinitions - .Where(td => td.Name.ToLower().Contains(query)) - .Select(td => td.Guid); + Guid[] guids; - throw new NotImplementedException(); + if(matchedTag is not null) { + guids = new[] { (Guid) matchedTag }; + } else { + guids = db.TagDefinitions + .Where(td => td.Name.ToLower().Contains(query)) + .Select(td => td.Guid) + .ToArray(); + } + + return db.Media + .Include(m => m.Tags) + .ThenInclude(m => m.TagDefinition) + .AsEnumerable() + .Where(m => m.Tags.IntersectBy(guids, t => t.TagDefinition.Guid).Any()) + .Concat(db.Media + .Where(m => + (m.ShortDescription != null && m.ShortDescription.ToLower().Contains(query)) || + (m.LongDescription != null && m.LongDescription.ToLower().Contains(query)))) + .DistinctBy(m => m.Guid) + .ToArray(); } } -- cgit v1.3