Avatar billede driis Nybegynder
11. juli 2004 - 19:51 Der er 6 kommentarer og
2 løsninger

Hjælp til SQL stored procedure - tekstuel søgning

Jeg har en tabel, der blandt andet indeholder 2 kolonner med tekst. Jeg ønsker at kunne lave en søgning i disse kolonner og returnere de rækker, der matcher søgekriteriet. Søgekriteriet er en tekststreng, og det skal være muligt at matche hele ord/dele af ord, med og uden forskel på store og små bogstaver og evt. med wildcards. Det skal også være muligt at returnere rækker, der indeholder alle ord fra søgekriteriet, eller række, der kun indeholder nogle af ordene.

Jeg bruger MS SQL Server 2000 og tilgår databasen fra ASP .NET. Jeg vil gerne opnå den beskrevne funktionalitet ved at kalde en stored procedure med søgekriteriet som parameter og få returneret de rækker, der passer til søgningen. Jeg er ret grøn til SQL og stored procedures, så spørgsmålet er: Hvordan løses ovenstående ?
Avatar billede janus_007 Nybegynder
11. juli 2004 - 20:08 #1
Det lyder som om du skal bruge FTI (Full text indexing)

Du kan snildt lave en sp der bruger fti, men i første omgang vil jeg nok råde dig til at sætte dig ind i fti.

Her er et par link der kan lede dig på vej:
http://www.databasejournal.com/features/mssql/article.php/1438211

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/howtosql/ht_fultxtho_1a2b.asp?frame=true

Lad dig nu ikke skræmme det er ikke så svært som det lige umiddelbart ser ud til.
Avatar billede driis Nybegynder
11. juli 2004 - 21:02 #2
Af en række grunde er det desværre ikke muligt for mig at bruge FTI.
Avatar billede janus_007 Nybegynder
11. juli 2004 - 21:10 #3
Ok.
Men så post lidt af din tabel og evt. noget du vil lede efter :O), så kan vi bedre se hvad du vil!
Avatar billede driis Nybegynder
12. juli 2004 - 10:45 #4
Sagen er den at jeg kun har lov at søge i databasen, og ikke ændre den, heller ikke at oprette Full Text Catalogs. Teksten, der skal søges i kan være hvad som helst, f.eks. ordlyden på en hjemmeside.
Avatar billede driis Nybegynder
12. juli 2004 - 10:50 #5
F.eks. kunne teksten i tabellen være:

"The Washington Post skriver mandag, at præsident George W. Bush og hans administration arbejder på en model, ....."
(typisk noget længere)

Jeg vil så gerne f.eks. kunne søge på "Bush" og finde ovenstående tekst.
Avatar billede janus_007 Nybegynder
12. juli 2004 - 14:40 #6
Uden fti er sådanne søgninger virkelig latterligt langsomme.

Men måden du kan gøre det på er:

select * from myTable where textheader like '%bush%'

Jeg forudsætter et kolonnen textheader vil indeholde "The Washington Post skriver mandag, at præsident George W. Bush og hans administration arbejder på en model, ....."

Jo større din tabel er jo langsommere vil det gå da den skal lave en full table scan ved hver query. Du kan desværre heller ikke opnå nogen performance forbedring ved at oprette et index da du tillader wildcard på begge sider af søge ordet.

Hvor mange rækker indeholder din tabel?
Avatar billede driis Nybegynder
12. juli 2004 - 15:09 #7
Tabellen jeg søger i kommer til at indeholde et sted mellem 20 og 200 rækker.
Avatar billede janus_007 Nybegynder
12. juli 2004 - 15:52 #8
Ja ok - så burde det ske rimeligt hurtigt.

Hvis du vil lave en stored procedure så gør sådan her:

create proc usp_find_articles
@searchword varchar(200)
as
begin

select * from myTable where textheader like '%' + @searchword + '%'

end
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