zoukankan      html  css  js  c++  java
  • 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;
    
    
    
    
            }
  • 相关阅读:
    关于matplotlib绘制直方图偏移的问题
    XP下 无法定位程序输入点WSAPoll于动态链接库ws2_32.dll 的解决办法
    Ubuntu 拨号上网及校园网开启IPV6
    php性能优化
    Mac OS X 10.11.6 重置root密码
    php 接口类与抽象类的实际作用
    Redis Cluster集群的搭建与实践
    nginx 反向代理 取得真实IP和域名
    mysql主从配置,出错
    mycat水平分片规则
  • 原文地址:https://www.cnblogs.com/wphl-27/p/8804463.html
Copyright © 2011-2022 走看看