【发布时间】:2010-09-20 20:22:50
【问题描述】:
我已将全文搜索添加到我的 sql server 2008 express 数据库中,并为单个表中的两列创建了索引目录。所以现在,我必须重写我的一个存储过程,但我不知道从哪里开始。以下是我当前需要转换以利用全文搜索功能的 SP:
ALTER PROCEDURE [dbo].[sp_page_GetPostsBySearchFront]
(
@Title nvarchar(256),
@Content nvarchar(MAX),
@startRowIndex INT,
@maximumRows INT
)
AS
BEGIN
SELECT
RowNumber,
postId,
Title,
Content,
DateCreated,
IsPublished,
PublishOnDate,
Type,
MenuName
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY posts.postId DESC) AS RowNumber,
posts.postId,
posts.Title,
posts.Content,
posts.DateCreated,
posts.IsPublished,
posts.PublishOnDate,
posts.Type,
posts.MenuName
FROM posts
GROUP BY
posts.postId,
posts.Title,
posts.Content,
posts.DateCreated,
posts.IsPublished,
posts.PublishOnDate,
posts.Type,
posts.MenuName
HAVING (posts.Title LIKE N'%' + @Title + N'%')
OR (posts.Content LIKE N'%' + @Content + N'%')
AND (posts.IsPublished = 1)
AND (posts.PublishOnDate <= GETDATE())
) as u
WHERE u.RowNumber > @startRowIndex
AND u.RowNumber <= (@startRowIndex + @maximumRows)
END
有人能解释一下我是如何完成这项任务的吗?我是使用 CONTAINS 还是 FREETEXT 以及在哪里添加它。我只是迷路了?谢谢!
【问题讨论】:
-
你为什么要对所有这些帖子进行分组?
-
您需要修改那些包含
like语句的谓词并在其中包含contains,如果您想利用加速查询并且您可能希望将这些like语句保留在以防万一您想要更精确的结果。
标签: sql sql-server tsql sql-server-2008 full-text-search