在SQL
2008-04-02 10:43:16来源:互联网 阅读 ()
现在很多网站都提供了站内的搜索功能,有的很简单在SQL语句里加一个条件如:where names like ‘%words%’就能够实现最基本的搜索了。
我们来看看功能强大一点,复杂一点的搜索是如何实现的(在SQL SERVER200/2005通过存储过程实现搜索算法)。
我们把用户的搜索能够分为以下两种:
1.精确搜索,就是把用户输入的各个词语当成一个整体,不分割搜索.
2.像百度,GOOGLE相同的,按空格把输入的每一个词分离,只要包含这些词语,而不管出现的顺序,称为ALL-Word Search.
3.对输入的词只要有一个出现就为匹配 称为Any-Word Search
一、对搜索结果进行排序的算法
在前面提到的LIKE语句最大的问题就是搜索的结果是没有经过排序的,我们不知道结果出现在的顺序是如何的,因为他是随机的。像百度,GOOGLE都会对结果用算法进行排序再显示的.好我们也来建立一个简单的排序法。一个很常见的算法是计算关键词在被搜索内容中出现的次数,次数最多的排在结果的第一位。我们的是在存储过程中实现这个算法的,而在SQLSERVER中没有提供计算关键词在被搜索内容中出现的次数这样的函数,我们要自己写一个UDF(User -Defined Functions),UDF是SQLSERVER的内部函数,能够被存储过程调用或被其他UDF调用。函数如下:
1CREATE FUNCTION dbo.WordCount
2
3(@Word VARCHAR(15),
4
5@Phrase VARCHAR(1000))
6
7RETURNS SMALLINT
8
9AS
10
11BEGIN
12
13/**//* 假如@Word 或@Phrase 为空返回 0 */
14
15IF @Word IS NULL OR @Phrase IS NULL RETURN 0
16
17/**//* @BiggerWord 比@Word长一个字符 */
18
19DECLARE @BiggerWord VARCHAR(21)
20
21SELECT @BiggerWord = @Word 'x'
22
23/**//*在 @Phrase用@BiggerWord替换@Word */
24
25DECLARE @BiggerPhrase VARCHAR(2000)
26
27SELECT @BiggerPhrase = REPLACE (@Phrase, @Word, @BiggerWord)
28
29/**//* 相减结果就是出现的次数了 */
30
31RETURN LEN(@BiggerPhrase) - LEN(@Phrase)
32
33END
34
以上就是整个UDF,他用了一个很高效的方法来计算关键词出现的次数。
二、参数传递
用户输入的关键词从一个到多个不等,我们能够把参数固定为@word1~@word5,这样比较方面实现。当用户输入超过5个时,忽略不计,少于5个的地方视为空。其实GOOGLE也是这样做的,只是GOOGLE的最大词语限制是10个。
三、搜索的实现过程
假定我们对Product表进行搜索,Product字段有:Id,Name ,Descripton(产品描述),搜索要同时对Name 和 Description进行。
[1] [2] 下一页
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: 50种方法巧妙优化您的SQL
下一篇: 分页存储过程2005
- 在SQL 2005中实现循环每一行做一定的操作 2009-05-12
- 在SQL Server中使用索引的技巧 2009-05-12
- 在SQL Server 2008中安装安全审计 2009-05-12
- 四种方法在SQL Server数据库中成批导入数据 2009-05-12
- 在SQL Server中处理空值时涉及的三个问题 2009-05-12
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash