【发布时间】:2009-11-22 15:24:21
【问题描述】:
我正在我的网站上创建一个小型搜索功能,这可以在系统中搜索文章。每篇文章都有一组与之关联的关键字,这些关键字存储在 SQL Server 数据库中。
这是桌子:
CREATE TABLE [dbo].[SearchWords] (
[ID] [int] IDENTITY(1,1) NOT NULL,
[ArticleID] [int] NOT NULL,
[SearchWord] [nvarchar](20) NOT NULL,
CONSTRAINT [PK_SearchWords] PRIMARY KEY CLUSTERED
([ID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
) ON [PRIMARY]
每篇文章可以有无限数量的关键字。现在我的问题是搜索本身。 例如,当用户键入:
法国演员
我希望系统找到所有带有关键字 France 和 actor 的文章(仅一次 DISTINCT)。我将搜索条件作为 varchar(用空格分隔)传递给存储过程。然后我用以下函数拆分单词:(Erland Sommarskog)http://www.sommarskog.se/arrays-in-sql-2005.html#iter-list-of-strings
然后我如何将条件词与搜索词匹配并仅获得不同的文章 ID?
我正在使用类似的东西,只是我无法理解如何匹配所有关键字。如果只输入一个关键字,则此方法有效。如果用户输入多个,那么即使文章包含所有涉及的关键字,它也不会返回任何内容。
declare @temp nvarchar(50)
set @temp = 'France actors'
SELECT DISTINCT Article.ArticleID
FROM Article
INNER JOIN SearchWords
ON Article.ArticleID = SearchWords.ArticleID
JOIN iter_charlist_to_tbl(@temp, DEFAULT) s
ON SearchWords.SearchWord = s.nstr
有什么想法吗?
【问题讨论】:
标签: sql sql-server search join