zoukankan      html  css  js  c++  java
  • 关键字检索,找到所有数据

    首先来看看需求

    用户输入 “北京市小饭锅餐厅电话”

    如果数据库中存在着这样的全部匹配的数据时,当然可以查寻的到,但是数据库中是记的“北京小饭锅餐厅电话” 用一般的 Like '%{用户输入}%' 就不能办到了 

    这样怎么办,简单说下LZ思路,就是把用户输入项拆分成小单位的关键字再去搜索,任何匹配的数据就都出来了,忘了一点可以根据需要先过滤掉一些没用的词

     1 using System.Linq;
     2 using Core.Common;
     3 using System.Web;
     4 using System.Text.RegularExpressions;
     5 
     6 namespace Core.Helper
     7 {
     8     public class KeySearch
     9     {
    10         private static int _keyCode = 2;//关键字最小组合字数
    11         
    12         //过滤关键字
    13         private static string[] ReplaceKey ={18                                                "",
    19                                                "",
    20                                                "",
    21                                                "",
    22                                                "",
    23                                                "地方",
    24                                                " "
    25                                            };
    26         /// <summary>
    27         /// 搜索关键字组合方法
    28         /// </summary>
    29         /// <param name="keyword"></param>
    30         /// <returns></returns>
    31         public static string KeySearchSpan(string keyword)
    32         {
    33             string reStr = "";
    34             string copyStr = keyword;
    35             if (copyStr.Length < _keyCode)
    36             {
    37                 reStr = copyStr + ",";
    38             }
    39             else
    40             {
    41                 var query = from data in ReplaceKey
    42                             select data;
    43                 foreach(var s in query)
    44                 {
    45                     copyStr = Regex.Replace(copyStr, s, "", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
    46                 }
    47                 int count = copyStr.Length - _keyCode + 1;
    48                 for (int i = 0; i < count; i++)
    49                 {
    50                     reStr += copyStr.Substring(i, _keyCode) + ",";
    51                 }
    52             }
    53             return reStr;
    54         }
    55     }
    56 }

    通过方法处理后的字符串为 "北京,京小,小饭,饭锅,锅餐,餐厅,厅电,电话,"

    按照这样的关键字再到数据库中去搜索,应该不会落下任何匹配的数据了

    不多说 在看看存储过程怎么处理

     1 -- =============================================
     2 -- 作者:huangtao
     3 -- 功能描述: 电话搜索列表
     4 -- 当前版本: 001.001.001 
     5 -- 修改描述: 1.
     6 --             2.
     7 -- =============================================
     8 ALTER PROCEDURE [dbo].[PH_Tel_SearchList_S]
     9 @SITEID         INT,             --城市ID
    10 @KEYWORDS        VARCHAR(300),     --模糊查询条件 以,号分割
    11 @CURPAGE        INT,             --当前页          
    12 @PAGESIZE       INT,             --分页大小
    13 @COUNT            INT  OUTPUT      --总条数
    14 AS
    15 BEGIN
    16     DECLARE @POS INT --字符串分割个数
    17     DECLARE @LEN INT --单次字符长度
    18     DECLARE @TEMP VARCHAR(10) --单次字符内容
    19     DECLARE @WHERE VARCHAR(2000)  --拼接的SQL语句条件
    20     DECLARE @FIELDS VARCHAR(1000)  --字段名
    21     SET @POS=CHARINDEX(',',@KEYWORDS,0)
    22     SET @WHERE=' SITEID='+CAST(@SITEID AS VARCHAR(10)) + ' AND CCOOCHK=1 AND ISDEL=0 AND ('
    23     WHILE(@POS>0)
    24     BEGIN
    25         SET @TEMP=SUBSTRING(@KEYWORDS,0,@POS)
    26         SET @LEN=LEN(@TEMP)
    27         SET @WHERE=@WHERE+'(TELNAME+TELINFO+TELINFO1+SPINFO+KEYWORD) LIKE ''%' +@TEMP+'%'' '
    28         SET @KEYWORDS=STUFF(@KEYWORDS,1,@LEN+1,'')
    29         SET @POS=CHARINDEX(',',@KEYWORDS,0)
    30         IF @POS>0
    31             SET @WHERE=@WHERE+' OR '
    32     END
    33     SET @WHERE=@WHERE+')'    
    34     SET @FIELDS='ID,TELNAME,TELINFO,TELINFO1,SPINFO,KEYWORD,ISTJ,ISYP,STATE,ISSTATE,UPTIME'
    35     EXEC PAGE_NEW 'YP_DIR',@FIELDS,@WHERE,'ISTJ DESC,UPTIME DESC ',@PAGESIZE,@CURPAGE, @COUNT OUT 
    36 END

    LZ的需求是电话库的搜索 任何用户输入相关数据都拿出

    最后面 EXEC PAGE_NEW  这个就是一个通用的分页存储过程 百度一下到处都有 这就不贴上来了 

  • 相关阅读:
    定义函数
    变量与常量
    字符串与格式化
    字符串与编码
    字符编码
    元组-tuple
    列表-list
    分支和循环
    润乾配置连接kingbase(金仓)数据库
    润乾报表在proxool应用下的数据源配置
  • 原文地址:https://www.cnblogs.com/cake/p/3423693.html
Copyright © 2011-2022 走看看