关键字检索,找到所有数据_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 关键字检索,找到所有数据

关键字检索,找到所有数据

 2013/11/14 17:49:59  小小新新  博客园  我要评论(0)
  • 摘要:首先来看看需求用户输入“北京市小饭锅餐厅电话”如果数据库中存在着这样的全部匹配的数据时,当然可以查寻的到,但是数据库中是记的“北京小饭锅餐厅电话”用一般的Like'%{用户输入}%'就不能办到了这样怎么办,简单说下LZ思路,就是把用户输入项拆分成小单位的关键字再去搜索,任何匹配的数据就都出来了,忘了一点可以根据需要先过滤掉一些没用的词1usingSystem.Linq;2usingCore.Common;3usingSystem.Web
  • 标签:数据 关键字

首先来看看需求

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

如果数据库中存在着这样的全部匹配的数据时,当然可以查寻的到,但是数据库中是记的“北京小饭锅餐厅电话” 用一般的 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  这个就是一个通用的分页存储过程 百度一下到处都有 这就不贴上来了 

发表评论
用户名: 匿名