我在我的網站上創建了一個小型搜索功能,這使得可以搜索系統中的文章。每篇文章都有一組與其關聯的關鍵字,這些關鍵字存儲在SQL Server數據庫中。搜索功能,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]
每篇文章都可以使用關鍵字無限量的。現在我的問題是搜索本身。 舉例而言,當用戶鍵入:
法國演員
我希望系統找到關鍵字法國和演員所有文章(只有一次不同)。我將搜索條件作爲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
任何想法?
這將如何確保你同時匹配'France'和'actors'? – Andomar
啊,對。我的錯誤太快瀏覽了這個問題。開始重寫它,但我得到了與上述相同的解決方案,並且沒有理由發佈那兩次。 – Donnie
我稍微更改了您的代碼,以返回匹配關鍵字的數量。這樣我可以顯示結果,首先產生最高的關鍵字匹配。 有沒有辦法來捕獲這個產量的記錄數量?我將它與一個返回記錄的C#SQL-to-Linq類相結合。但是,我希望它也可以返回一個OUTPUT int與匹配的記錄數。我需要向用戶顯示找到的總行數,並且還可以使用.Skip(x)行數。 – Patrick