CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

想做一个搜索数据库的引擎,怎么做啊?

楼主myboll(jim)2004-12-02 09:55:29 在 Web 开发 / ASP 提问

 
  比如,输入深圳闪盘,他会按“深圳闪盘”、"深圳"和"闪盘"来搜索,  
   
  而不是只搜索"深圳闪盘"或搜索"深"、"圳"、"闪"、"盘"。 问题点数:20、回复次数:28Top

1 楼myboll(jim)回复于 2004-12-02 10:22:10 得分 0

??????????????Top

2 楼butcher2002(我又出来捣乱了)回复于 2004-12-02 10:32:51 得分 5

这个要建立索引库  
   
  比如"深"、"圳"、"闪"、"盘"独立存在于索引库才可以Top

3 楼lwlmaomao()回复于 2004-12-02 10:58:29 得分 5

呵,你意思是接词组来搜索。“深圳闪盘”、"深圳"和"闪盘"是词组,而“深”、“圳”、“闪”、“盘”不是词组?如果要这样的话比较麻烦:)Top

4 楼myboll(jim)回复于 2004-12-02 11:25:20 得分 0

高手来看看我抄的算法,查询没有问题.但是怎么让查询的字段以不同颜色显示呢?  
  比如:查"深圳闪盘",在结果中有"深圳","闪盘"的都显示红色?  
   
  <form   name="frm_Search"   method="get"   action="Search.asp">    
              <p>   <input   name="key"   type="text"   size="25"   maxlength="50"><br>  
              <input   type="submit"   value="           搜索         "></p>  
  </form>    
  <%  
  Dim   S_Key,RST,StrSQL    
  S_Key   =   Trim(Request("key"))   '得到搜索关键字的值    
   
  If   S_Key   <>""   then    
  Set   RST=Server.CreateObject("ADODB.RecordSet")    
  StrSQL=AutoKey(S_Key)   '此处使用自定义函数   AutoKey(),该函数为实现智能搜索的核心    
  RST.Open   StrSQL,newsconn,3,2   '得到搜索后的记录    
  If   RST.BOF   And   RST.EOF   Then    
  response.write   "<font   color=#FF0000>未找到任何结果!!!</font>   "  
  Else    
  %>    
  搜索名称为“<font   color="#FF0000"><%=   S_Key   %></font>”的项,共找到   <font   color="#FF0000"><%=   RST.RecordCount   %></font>   项:<p>    
  <%    
  While   Not   RST.EOF   '遍历整个记录集,显示搜索到的信息并设置链接    
  %>    
  <   !--   此处可设为你所需要的链接目标   -->    
  <font   style="font:   12pt   宋体"><a   href="info.asp?ID=<%=   RST("ID")   %>"   target="_blank"><%=   RST("Name")   %></a></font><br>    
  <   !--   显示部分详细内容   -->    
  <font   style="font:   9pt   宋体"><%=   Left(RST("profile"),150)   %></font><p>    
  <%    
  RST.MoveNext    
  Wend    
  end   if  
  RST.close  
  set   RST   =   Nothing  
  end   if  
  %>  
  <%    
  Function   AutoKey(strKey)    
  CONST   lngSubKey=2    
  Dim   lngLenKey,   strNew1,   strNew2,   i,   strSubKey    
   
  '检测字符串的合法性,若不合法则转到出错页。出错页你可以根据需要进行设定。    
  if   InStr(strKey,"=")<>0   or   InStr(strKey,"`")<>0   or   InStr(strKey,"'")<>0   or   InStr(strKey,"   ")<>0   or   InStr(strKey," ")<>0   or   InStr(strKey,"'")<>0   or   InStr(strKey,chr(34))<>0   or   InStr(strKey,"\")<>0   or   InStr(strKey,",")<>0   or   InStr(strKey,"<")<>0   or   InStr(strKey,">")<>0   then    
  Response.Redirect   "error.htm"    
  End   If    
   
  lngLenKey=Len(strKey)    
  Select   Case   lngLenKey    
  Case   0   '若为空串,转到出错页    
  Response.Redirect   "error.htm"    
  Case   1   '若长度为1,则不设任何值    
  strNew1=""    
  strNew2=""    
  Case   Else   '若长度大于1,则从字符串首字符开始,循环取长度为2的子字符串作为查询条件    
  For   i=1   To   lngLenKey-(lngSubKey-1)    
  strSubKey=Mid(strKey,i,lngSubKey)    
  strNew1=strNew1   &   "   or   Name   like   '%"   &   strSubKey   &   "%'"    
  strNew2=strNew2   &   "   or   salekeywords   like   '%"   &   strSubKey   &   "%'"    
  Next    
  End   Select    
   
  '得到完整的SQL语句    
  AutoKey="Select   *   from   userinfo   where   Name   like   '%"   &   strKey   &   "%'   or   salekeywords   like   '%"   &   strKey   &   "%'"   &   strNew1   &   strNew2    
  AutoKey=AutoKey   &   "   order   by   gade,keywords,jifen"  
  End   Function    
  %>    
  <%  
  newsconn.close  
  set   newsConn   =   Nothing  
  %>Top

5 楼myboll(jim)回复于 2004-12-02 11:27:58 得分 0

如果仅仅显示"深圳闪盘"为红色那好办,replace就行了  
  现在想要,strSubKey=Mid(strKey,i,lngSubKey)     中的strSubKey都显示红色,怎么弄?  
  高手指教啊Top

6 楼myboll(jim)回复于 2004-12-02 11:34:00 得分 0

???????????????????????????????  
  ???????????????????????????????????????/  
  ??????????????????????????????????????????Top

7 楼butcher2002(我又出来捣乱了)回复于 2004-12-02 11:49:43 得分 9

我写过一个简单的~不适用于大量数据  
   
  是类似于新浪搜索相关新闻的  
   
  比如     软件会议召开  
   
  数据库定义搜索关键字有   软件   会议  
   
  先看用一个循环判断每个关键字是否包含于搜索条件,建立数组  
   
  包含则添加     text=text+   "or   字段   like   '%"&关键字&"%'"  
   
  最后组合查询条件   把text左边3个字符去掉~就可以了Top

8 楼myboll(jim)回复于 2004-12-03 17:49:47 得分 0

那你那没有办法排序啊  
  比如:搜索"北京电子"  
      按理说第一个要显示含有"北京电子"条目  
      然后显示含有"北京"和"电子"的条目  
   
  现在,你text=text+   "or   字段   like   '%"&关键字&"%'"   是没有规则的排序啊?????????????  
  谁能解决啊,大峡们??  
   
  大家来看一下下面的语句:  
  For   i=1   To   lngLenKey-(lngSubKey-1)    
            strSubKey=Mid(strKey,i,lngSubKey)    
            strNew1=strNew1   &   "   or   Name   like   '%"   &   strSubKey   &   "%'"    
            strNew2=strNew2   &   "   or   salekeywords   like   '%"   &   strSubKey   &   "%'"    
  Next    
  '得到完整的SQL语句    
  AutoKey="Select   *   from   userinfo   where   Name   like   '%"   &   strKey   &   "%'   or   salekeywords   like   '%"   &   strKey   &   "%'"   &   strNew1   &   strNew2    
  AutoKey=AutoKey   &   "   order   by   gade,keywords,jifen"  
   
  怎么让匹配 strKey 的显示在前,匹配 strNew1 strNew2的显示在后呢?(order   by   后面的可以改变)Top

9 楼myboll(jim)回复于 2004-12-03 18:05:46 得分 0

比如:搜索"北京电子"  
      按理说第一个要显示含有"北京电子"条目  
      然后显示含有"北京"和"电子"的条目  
   
  谁能解决啊,大峡们??  
  嘿嘿,现在智能搜索啦,亮色显示啦,快速分页啦全都搞定,但是在模糊查询时怎么让匹配长的字符串显示也靠前呢?  
   
  我用google搜索"美宝网",第一条显示为含有美宝网的条目,下面才是含美宝、网之类的条目,他是怎么实现的呢Top

10 楼myboll(jim)回复于 2004-12-03 18:15:41 得分 0

有兴趣学习、参考   或   指教   的朋友到下面地址一试:  
   
        http://www/myboll.com/sz  
   
  真诚期待你的建议。嘿嘿排序拦着我了  
  到底如何可以先按匹配字符串排序,然后按order   by   后面的fields来排序呢???????Top

11 楼sys9933(草人)回复于 2004-12-03 18:39:01 得分 0

studyTop

12 楼myboll(jim)回复于 2004-12-04 09:33:42 得分 0

解决上面我说的排序问题,现在又来了新问题(悲惨啊!!!!!!!!!),如下:  
     
        当我输入   "china   game"   时,百度和GOOGLE都自动认为他是英语字,并分别按"china"、“game”来查询,而我写的只能按“ch”,“in”等两个字母查询。  
   
        就是说,一律当作汉字来处理了。  
   
        怎么才能输入“北京电子世界”时,按照“北京电子世界”、“北京”、“电子”、“世界”来查询(已经实现),输入"beijing   dian   zi   shi   jie"却可以按照"beijing","dian","zi","shi","jie"来查询(没有实现~~~~~~~~~~~~~~~~~~~~~~~~~~)。  
   
        大虾请不吝赐教。  
        在下先谢谢了。Top

13 楼myboll(jim)回复于 2004-12-04 09:55:31 得分 0

就是说,我怎么才能知道查询输入的是英文字?????????  
   
  如果查询关键字里面是这样“北京电子conputer”,应该按照“北京电子computer”、“北京”、“电子”、“computer”来查询。  
   
  如果查询关键字里面是这样“China   Super   conputer”,应该按照“China   Super   conputer”,"china","super","computer"来查询  
   
   
   
      大家帮忙啊!!!!!!!Top

14 楼Juniorman(心在灿烂中死去,爱在灰烬中重生)回复于 2004-12-04 10:04:24 得分 0

路过  
  学习....Top

15 楼myboll(jim)回复于 2004-12-04 10:30:41 得分 0

奶奶的雄,如果输入纯英文字咱也能搞定(如下),如果混合输入怎么办呢(我上面提的问题)  
   
  strSubKey   =   Split(strKey,   "   ")  
  For   i   =   0   To   UBound(strSubKey)  
            strSubKey=Mid(strKey,i,lngSubKey)    
            strNew1=strNew1   &   "   or   Name   like   '%"   &   strSubKey(i)   &   "%'"    
            strNew2=strNew2   &   "   or   salekeywords   like   '%"   &   strSubKey(i)   &   "%'"    
  Next  
   
  如果混合输入怎么办呢(我上面提的问题) Top

16 楼myboll(jim)回复于 2004-12-04 10:36:25 得分 0

哦多了一行strSubKey=Mid(strKey,i,lngSubKey)Top

17 楼myboll(jim)回复于 2004-12-04 12:25:13 得分 0

??????????????????????Top

18 楼tigerhu76(虎虎)回复于 2004-12-04 13:29:10 得分 0

学习中……Top

19 楼myboll(jim)回复于 2004-12-04 14:30:07 得分 0

现在问题又来了:  
   
      当我输入"北京电子时"   是按照"北京电子","北京","电子"模糊查找,用OR   上面已经实现了.  
   
      要精确查找怎么办?比如输入"北京   电子   清华   物理系",现在以空格split,然后找出完全符合"北京","电子","清华","物理系"条件,而且数据库里面需要两个字段来匹配,怎么实现????  
   
  下面的OR简单换成   and   也不行啊??  
  strSubKey   =   Split(strKey,   "   ")  
  For   i   =   0   To   UBound(strSubKey)  
            strNew1=strNew1   &   "   and   Name   like   '%"   &   strSubKey(i)   &   "%'"    
            strNew2=strNew2   &   "   and   salekeywords   like   '%"   &   strSubKey(i)   &   "%'"  
            strNew3=strNew3   &   "   and   title   like   '%"   &   strSubKey(i)   &   "%'"    
  Next  
   
  因为单字段和子串之间是and的关系,而3个字段之间是OR的关系啊,怎么搞定来实现精确查询呢??  
  (name   like   '%"   &   strSubKey(0)   &   "%'   and   name   like   '%"   &   strSubKey(1)   &   "%')   or   (salekeywords   like   '%"   &   strSubKey(0)   &   "%'   and   salekeywords   like   '%"   &   strSubKey(1)   &   "%')     OR   (title   like   '%"   &   strSubKey(0)   &   "%'   and   title   like   '%"   &   strSubKey(1)   &   "%')    
   
  有没有简单点的发方法??????????????Top

20 楼federer8250()回复于 2004-12-04 16:32:36 得分 0

关注中Top

21 楼lishuai818(李坏)回复于 2004-12-04 18:03:33 得分 0

路过~~~进来歇息一会Top

22 楼myboll(jim)回复于 2004-12-04 19:07:04 得分 0

模糊查询问题总结如下:(大家帮忙啊)  
   
    1:排序问题:如何让匹配字数多的关键字的记录排在记录的上面,例如查询关键字里面是这样"北京电子",那么应该先显示含有"北京电子"的记录,然后显示含有"北京"的记录,然后显示含有"电子"的纪律.  
   
    2:关键字判断问题:如果查询关键字里面是这样“北京电子computer”,应该按照“北京电子computer”、“北京”、“电子”、“computer”来查询。(conputer不要拆开).  
   
  精确查询问题如下:  
    上面两个问题依然存在  
    3:精确的匹配问题:比如查询关键字是"北京 电子 中管村",如何只显示如下记录:记录的指定几个FIELDS(如:title,name,profile)包含"北京""电子""中管村",三个关键字一个都不能少.  
   
  Top

23 楼sun94510451(中原)回复于 2004-12-04 20:37:55 得分 1

要截取字符串Top

24 楼myboll(jim)回复于 2004-12-06 09:48:52 得分 0

截取字符串?当然都截取了  
  但是这样按这些字符串根据字你要求排序呢???  
  Top

25 楼myboll(jim)回复于 2004-12-06 09:55:03 得分 0

精确查询问题如下:  
    3:精确的匹配问题:比如查询关键字是"北京 电子 中管村",如何只显示如下记录:记录的指定几个FIELDS(如:title,name,profile)包含"北京""电子""中管村",三个关键字一个都不能少  
   
        意思是说:在title,name,profile中只要能找全"北京""电子""中管村"三个关键字,就显示.(当然包括,仅仅profile中只要能找全"北京""电子""中管村"三个关键字也显示....)Top

26 楼jdh2010(小金)回复于 2004-12-06 10:33:24 得分 0

学习中……Top

27 楼heluqing(鉴之小河〖劳累求充实〗)(vcl .net)回复于 2004-12-06 10:44:08 得分 0

学习Top

28 楼myboll(jim)回复于 2004-12-06 12:16:51 得分 0

刚才看了网友的帖子,我感觉也是个问题,在这里称为第四条  
   
        4:   如果表中   profile   字段为TEXT,检索很费时间,怎样才能减少检索len(不同的字段)>150时的时间Top

相关问题

  • 怎么实现一个功能相对强大的对数据库搜索引擎?
  • 在数据库中怎么用关键字查询?就象搜索引擎那样??
  • 数据库引擎
  • 数据库搜索
  • 请问如何做一个可以搜索数据库内容的引擎?我已经做好了数据库和引擎, 但是连接有一些问题,
  • Dao数据库引擎初始化错误是怎么回事呀??
  • 怎么发放dao开发的程序!哪有dao 数据库引擎??
  • @@@@@@@@@@@@@@完了完了,access数据库引擎停止,打不开了,怎么办啊??????????
  • 对数据库进行搜索是怎么实现的阿?
  • 紧急!!! 我写了一个bcb50的数据库程序在没有安装bcb50的机器上报错没有数据库引擎怎么办(zwjmouse)

关键词

  • 查询
  • 字段
  • 排序
  • 数据库
  • 深圳
  • strnew
  • strsubkey
  • strkey
  • 关键字
  • lngsubkey

得分解答快速导航

  • 帖主:myboll
  • butcher2002
  • lwlmaomao
  • butcher2002
  • sun94510451

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo