会 员 登 录
热 门 文 章
相 关 文 章
- 没有文章
Tags(标签)
在SQL Server 2005中用存储过程实现搜索功能
10
11

11

这里对Name赋予权重为3,Description为1(大家根据实际情况赋予不同的权重),Rank是计算列,通过前面定义的UDF计算所关键词出现的次数乘上权重等到的。
同样的All-word Search实现如下:
1
SELECT Product.Name,
2
3
(3 * wordCount(@word1, Name) + wordCount(@word1, Description)) *
4
5
CASE
6
7
WHEN @word2 IS NULL THEN 1
8
9
ELSE 3 * wordCount(@word2, Name) + wordCount(@word2, Description)
10
11
END *
12
13

14
15
AS Rank
16
17
FROM Product
18
SELECT Product.Name, 2

3
(3 * wordCount(@word1, Name) + wordCount(@word1, Description)) *4

5
CASE 6

7
WHEN @word2 IS NULL THEN 1 8

9
ELSE 3 * wordCount(@word2, Name) + wordCount(@word2, Description)10

11
END *12

13

14

15
AS Rank16

17
FROM Product18

这时把每个关键词出现的次数相乘只要一个没出现
还可以这样实现:
1
SELECT Product.Name,
2
CASE
3
WHEN @word1 IS NULL THEN 0
4
ELSE ISNULL(NULLIF(dbo.wordCount(@word1, Name + ' ' + Description), 0), -1000)
5
END +
6
CASE
7
WHEN @word2 IS NULL THEN 0
8
ELSE ISNULL(NULLIF(dbo.wordCount(@word2, Name + ' ' + Description), 0), -1000)
9
END +
10

11
AS Rank
12
FROM Product
SELECT Product.Name, 2
CASE 3
WHEN @word1 IS NULL THEN 0 4
ELSE ISNULL(NULLIF(dbo.wordCount(@word1, Name + ' ' + Description), 0), -1000)5
END +6
CASE 7
WHEN @word2 IS NULL THEN 0 8
ELSE ISNULL(NULLIF(dbo.wordCount(@word2, Name + ' ' + Description), 0), -1000)9
END +10

11
AS Rank12
FROM Product对没出现的关键词赋值-1000,这样Rank就肯定为负数,负数表示搜索结果为空。
四、对结果进行分页
搜索的结果可能很多,对结果分页可以提高性能。我在如何在数据层分页以提高性能已经说明了如何用存储过程进行分页了,这里就不在详细复述了。
过程简单来说就是创建一个临时表,表中包含行号,读取时按行号来读取数据
五、完整代码
经过前面的分析,完整代码如下:
1
CREATE PROCEDURE SearchCatalog
2
(
3
@PageNumber TINYINT,
4
@ProductsPerPage TINYINT,
5
@HowManyResults SMALLINT OUTPUT,
6
@Allwords BIT,
7
@word1 VARCHAR(15) = NULL,
8
@word2 VARCHAR(15) = NULL,
9
@word3 VARCHAR(15) = NULL,
10
@word4 VARCHAR(15) = NULL,
11
@word5 VARCHAR(15) = NULL)
12
AS
CREATE PROCEDURE SearchCatalog 2
( 3
@PageNumber TINYINT,4
@ProductsPerPage TINYINT,5
@HowManyResults SMALLINT OUTPUT,6
@Allwords BIT,7
@word1 VARCHAR(15) = NULL,8
@word2 VARCHAR(15) = NULL,9
@word3 VARCHAR(15) = NULL,10
@word4 VARCHAR(15) = NULL,11
@word5 VARCHAR(15) = NULL)12
AS附件:
没有附件
0
票
顶一下
票
顶一下
0
票
踩一下
票
踩一下
| 文 章 评 论 | ||||||||
| ||||||||



您现在的位置: