Avatar billede peterterkildsen Nybegynder
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å?
Avatar billede yellow Nybegynder
30. maj 2002 - 15:25 #1
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
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester