• 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;
    
    
    
    
            }
  • 相关阅读:
    灵活的JavaScript(一)
    菜鸟快飞之JavaScript对象、原型、继承(三)
    菜鸟快飞之JavaScript对象、原型、继承(二)
    菜鸟快飞之JavaScript对象、原型、继承(一)
    undo清理 &redo 持久化
    mysql执行计划分析
    mysql5.6的统计信息
    pt-online-schema-change原理分析
    校验主从数据并修复
    使用伪master+binlog恢复数据
  • 原文地址:https://www.cnblogs.com/wphl-27/p/8804463.html
Copyright © 2020-2023  润新知