Utils: Fix GetSearchScore for multiple occurances of keyword in haystack

This commit is contained in:
2023-09-18 21:17:37 +02:00
parent a08df4c3ed
commit a6fef7fd9b

View File

@ -193,28 +193,27 @@ namespace Elwig.Helpers {
if (!searchKeywords.Any()) if (!searchKeywords.Any())
return 0; return 0;
return words return searchKeywords
.Select(w => { .Select(k => {
w = w?.ToLower(); k = k.ToLower();
var p = w?.ToLower()?.Split(" "); var scores = words.Select(w => {
if (w == null || p == null) w = w?.ToLower();
return 0; var p = w?.ToLower()?.Split(" ");
if (w == null || p == null) {
var t1 = searchKeywords.Where(f => w == f).Select(f => f.Length).OrderDescending().FirstOrDefault(0); return 0;
var t2 = searchKeywords.Where(f => p.Any(a => a == f)).Select(f => f.Length).OrderDescending().FirstOrDefault(0); } else if (k == w) {
var t3 = searchKeywords.Where(f => p.Any(a => a.StartsWith(f))).Select(f => f.Length).OrderDescending().FirstOrDefault(0); return 4 + k.Length;
var t4 = searchKeywords.Where(f => w.Contains(f)).Select(f => f.Length).OrderDescending().FirstOrDefault(0); } else if (p.Any(a => a == k)) {
if (t1 > 0) { return 3 + k.Length;
return 4 + t1; } else if (p.Any(a => a.StartsWith(k))) {
} else if (t2 > 0) { return 2 + k.Length;
return 3 + t2; } else if (w.Contains(k)) {
} else if (t3 > 0) { return 1 + k.Length;
return 2 + t3; } else {
} else if (t4 > 0) { return 0;
return 1 + t4; }
} else { });
return 0; return scores.Max() + scores.Count(s => s > 0);
}
}) })
.Sum(); .Sum();
} }