From bf579d1d90318a152713c0aeae90568a9f56b774 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Sat, 12 Apr 2025 21:32:58 +0800 Subject: [PATCH] Test fuzzy search --- .../SharedModels/MatchResult.cs | 2 +- .../Programs/Win32.cs | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher.Plugin/SharedModels/MatchResult.cs b/Flow.Launcher.Plugin/SharedModels/MatchResult.cs index 36677d4bb..a48347034 100644 --- a/Flow.Launcher.Plugin/SharedModels/MatchResult.cs +++ b/Flow.Launcher.Plugin/SharedModels/MatchResult.cs @@ -41,7 +41,7 @@ namespace Flow.Launcher.Plugin.SharedModels /// /// The final score of the match result with search precision filters applied. /// - public int Score { get; private set; } + public int Score { get; set; } /// /// The raw calculated search score without any search precision filtering applied. diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs index df22e24b1..1c1ea078b 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs @@ -91,12 +91,26 @@ namespace Flow.Launcher.Plugin.Program.Programs if (candidates.Count == 0) return null; - var match = candidates.Select(candidate => Main.Context.API.FuzzySearch(query, candidate)) + var match = candidates.Select(candidate => + { + var matchResult = Main.Context.API.FuzzySearch(query, candidate); + matchResult.Score = FuzzySearch(query, candidate); + return matchResult; + }) .MaxBy(match => match.Score); return match?.IsSearchPrecisionScoreMet() ?? false ? match : null; } + private static int FuzzySearch(string query, string stringToCompare) + { + var newScore = FuzzySharp.Fuzz.PartialTokenSetRatio(query.ToLower(), stringToCompare.ToLower()); + if (stringToCompare.Length < query.Length) + newScore = 0; + + return newScore; + } + public Result Result(string query, IPublicAPI api) { string title; @@ -112,13 +126,16 @@ namespace Flow.Launcher.Plugin.Program.Programs { title = resultName; matchResult = Main.Context.API.FuzzySearch(query, resultName); + matchResult.Score = FuzzySearch(query, resultName); } else { // Search in both title = $"{resultName}: {Description}"; var nameMatch = Main.Context.API.FuzzySearch(query, resultName); + nameMatch.Score = FuzzySearch(query, resultName); var descriptionMatch = Main.Context.API.FuzzySearch(query, Description); + descriptionMatch.Score = FuzzySearch(query, Description); if (descriptionMatch.Score > nameMatch.Score) { for (int i = 0; i < descriptionMatch.MatchData.Count; i++)