27. april 2002 - 11:06
Der er
1 kommentar
Brug af flere tabeller i full-text index
Jeg er begyndt at eksperimentere med brugen af full-text index i MS SQL, og har da også fundet ud af det mest basale. Jeg har bl.a. fundet ud af, at bruge følgende SQL-query:
SELECT TOP 100 PERCENT dbo.Page.PageID, dbo.Page.PageMenuText, dbo.Paragraph.ParagraphUpdatedDate, KEY_TBL.RANK AS Relevance
FROM dbo.Paragraph INNER JOIN
CONTAINSTABLE(Paragraph, ParagraphText, 'searchstring') KEY_TBL ON dbo.Paragraph.ParagraphID = KEY_TBL.[KEY] INNER JOIN
dbo.Page ON dbo.Paragraph.ParagraphPageID = dbo.Page.PageID
ORDER BY KEY_TBL.RANK DESC
Ovenstående SQL har jeg luret via Microsofts hjemmeside, og det virker umiddelbart ok, men mit problem er, at jeg gerne vil kunne foretage en søgning i flere kolonner, som er spredt over to tabeller. De to tabeller har jeg allerede tilføjet til mit full-text index, men spørgsmålet er om jeg overhovedet kan foretage en CONTAINSTABLE på to forskellige tabeller? Hvis jeg kan, hvordan gøres det så?
Lav en temporær tabel hvor du fylder dine forskellige containstable data ind i:
--Create temporary result table
CREATE TABLE #QueryResult (ID int, Rank int)
--perform search on first table and put results in temp table
INSERT #QueryResult
SELECT DocumentID, K.Rank
FROM Document
INNER JOIN CONTAINSTABLE( Document,*,@searchFor,1000) AS K
ON Document.DocumentID = K.[KEY]
--perform search on second table and put results in temp table
INSERT #QueryResult
SELECT documentID, KWD.RANK
FROM docKeyword
INNER JOIN
(SELECT KeywordID,K.Rank
FROM Keyword
INNER JOIN CONTAINSTABLE( Keyword,Keyword,@searchFor,1000) AS K
ON Keyword.KeywordID = K.[KEY]) AS KWD
ON docKeyword.KeywordID = KWD.KeywordID
--get all results from temp table
SELECT Document.DocumentID,Document.FileNam FROM Document
INNER JOIN
(SELECT TOP 1000 ID, Max(Rank) as Rank
FROM #QueryResult
GROUP BY ID
ORDER BY Rank DESC) AS Result
ON Document.Document_nr = Result.ID
--Drop temporary result table
DROP TABLE #QueryResult