Umbraco Examine 实现Fuzzy search
在Umbraco examine search项目开发中,有一个需求, 就是intercom 和 intercoms需要返回同样的结果
也就是说 搜索intercom 时, 能返回包含intercom和intercoms的结果
搜索intercoms时,能返回包含intercom和intercoms的结果
在网上搜索了一下,发现需要使用Fuzzy Search
使用Fuzzy Search 又有两种方式:
一种是IExamineValue, 因为SearchTerm.Fuzzy(0.1f) 返回的就是IExamineValue, 其中SearchTerm是指你的搜索框中输入的搜索字段(比如你要搜索intercom, 那么SearchTerm就是intercom)
另外一种是QueryString的形式,它应该看上去是如下的形式
-hideFromSearch:1 +(seoMetaKeywords:patrner~0.6 pageName:patrner~0.6 bodyText:patrner~0.6 richText:patrner~0.6 FileTextContent:patrner~0.6 ) +(seoMetaKeywords:pharmacies~0.6 pageName:pharmacies~0.6 bodyText:pharmacies~0.6 richText:pharmacies~0.6 FileTextContent:pharmacies~0.6 )
在我们的项目中,使用Fuzzy search之前,我们使用QueryString,格式如下:
(body:intercoms*) OR (detail:intercoms*) OR (additionalDetail:intercoms*) OR (title:intercoms*)
为了达到我们的目的,我们需要更改成如下形式
(body:intercoms~0.1) OR (detail:intercoms~0.1) OR (additionalDetail:intercoms~0.1) OR (title:intercoms~0.1)
在代码处,进行了如下更改:
Before
private static string BuildQueryString(string filter, string field) { var singleTerms = filter.Split(' '); var sb = new StringBuilder(); foreach (var term in singleTerms) { sb.Append(field); sb.Append(":"); sb.Append(term); sb.Append("*"); sb.Append(" AND "); } var reStr = sb.ToString(); reStr = reStr.Remove(reStr.LastIndexOf("AND") -1); reStr = "(" + reStr + ")"; return reStr; }
After
private static string BuildQueryString(string filter, string field) { var singleTerms = filter.Split(' '); var sb = new StringBuilder(); foreach (var term in singleTerms) { sb.Append(field); sb.Append(":"); sb.Append(term); //sb.Append("*"); // Comment for update to use fuzzy search sb.Append("~0.1"); sb.Append(" AND "); } var reStr = sb.ToString(); reStr = reStr.Remove(reStr.LastIndexOf("AND") -1); reStr = "(" + reStr + ")"; return reStr; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2017-04-12 C# 移除string[] 数组中的指定元素
2016-04-12 转载 ASP.NET MVC中使用ASP.NET Identity