Avatar billede rbl Praktikant
26. februar 2009 - 13:34 Der er 5 kommentarer og
1 løsning

Avanceret søgning med stored procedures

Hejsa

Jeg er igang med at lave en søgefunktion på mit hobbyprojekt, men den er lidt for kompliceret til, at jeg selv kan gennemskue den bedste løsning.

Hvis f.eks. brugeren søger på følgende: "tegneserie anders and"

Så skal jeg finde alle de resultater hvor disse ord indgår, men ikke nødvendigvis i sammenhæng.
Hvordan får jeg lavet en søgning vha. en stored procedure?

Jeg er startet lidt på det, men jeg er ikke tilfreds. For det første søger den kun på hele strengen, og for det andet bliver der en masse "like"-statements, hvilket ikke er ønskværdigt.

Er der ikke en smartere måde?

CREATE PROCEDURE Products_Search
(
@SearchString varchar(200)
)
AS
select * from Products
inner join Categories on Categories.id = Products.CategoryId
where
(
ProductName like '%' + @SearchString + '%'
or Description like '%' + @SearchString + '%'
or Category.Name like '%' + @SearchString + '%'
)
order by ProductName asc
Avatar billede arne_v Ekspert
26. februar 2009 - 13:56 #1
Kan du bruge FULL TEXT ?

Eller kan du emulere FULL TEXT ved at lave en hjælpetabel med alle ord ?

I modsat fald hænger du nok på hvad du gør nu (evt. lidt AND i.s.f. OR), men performance vil ikke være god.
Avatar billede rbl Praktikant
26. februar 2009 - 14:13 #2
Hvordan fungerer det der Full Text?
Avatar billede rbl Praktikant
26. februar 2009 - 16:00 #4
Det løser kun nogle af problemerne

Jeg har fået oprettet et Full Text Index på felterne "ProductName" og "Description". Jeg har droppet "Categories" ind til videre for at holde det simpelt.

Følgende sql kører:

SELECT    *
FROM        Products
WHERE    CONTAINS(*, ' "anders" and "rip" ')

Problemet er, at hvis ordet "anders" kun er i feltet "ProductName", og ordet "rip" kun er i feltet "Description", så finder den ikke noget. De 2 ord SKAL være i samme felt for at den returnerer rækken.

Hvordan løser jeg det?
Avatar billede rbl Praktikant
27. februar 2009 - 14:18 #5
Jeg tror jeg har fundet en løsning, der virker.

Men det var dig, der ledte mig i den rigtige retning, så læg et svar, så jeg kan give dig pointene.
Avatar billede arne_v Ekspert
27. februar 2009 - 17:09 #6
OK
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