Umbraco Examine 实现Fuzzy search
2024-08-28 16:05:10
在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: +(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") -); 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") -); reStr = "(" + reStr + ")";
return reStr; }
最新文章
- redis集群同步迁移方法(二):通过redis-migrate-tool实现
- js判断微信浏览器
- lsslot
- 编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时会产生Additional information: 阅读器关闭时尝试调用 Read 无效问题,解决方法与解释
- 悟透javascript读书笔记
- 说明&;总目录
- Robot framework+python安装使用图解版
- Python实践之(七)逻辑回归(Logistic Regression)
- [CSS] Make element not selectable
- bzoj 1070 [SCOI2007]修车(最小费用最大流)
- 单调队列-hdu-3415-Max Sum of Max-K-sub-sequence
- -bash: ./job.sh: /bin/sh^M: bad interpreter: 没有那个文件或目录
- REUSEADDR 选项
- MySQL- 5.7 sys schema笔记
- linux 下怎样查找一个文件夹在哪个目录下?
- 【翻译】CSS Animations VS the Web Animations API:案例学习
- asp.net core系列 57 IS4 使用混合流(OIDC+OAuth2.0)添加API访问
- SSIS - 9.文件系统任务
- Spring Boot 2.x(九):遇到跨域不再慌
- Java 开发笔记2
热门文章
- [java]Arrays.copyOf() VS System.arrayCopy()
- hiho一下 第四十九周 题目1 : 欧拉路·一【无向图 欧拉路问题】
- 《机器学习实战》学习笔记第十一章 —— Apriori算法
- POJ3660 暑假集训-最短路H题floyd
- php.ini中的session配置说明
- Eclipse_常用技巧_02_使用Eclipse进行源码分析
- nodejs 解析 base64 文本
- leetcode 226. Invert Binary Tree(递归)
- linux命令学习笔记(37):date命令
- es6的foreach循环遍历