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;
    
    
    
    
            }
  • 相关阅读:
    mybatis入门
    Golang学习笔记——Slice
    struts2文件上传问题
    分页查询的具体实现
    ajax发送异步请求——GET方式
    Golang学习笔记——array
    关于Spring出现"COMMIT/AUTO or remove 'readOnly' marker from transaction definition."的解决办法
    Golang学习笔记——control_structure
    SSH框架整合过程
    Golang学习笔记——variable
  • 原文地址:https://www.cnblogs.com/wphl-27/p/8804463.html
Copyright © 2011-2022 走看看