21. december 2009 - 23:27Der er
10 kommentarer og 1 løsning
Full text search
Hejsa
Jeg har lidt problemer med Full text search. Jeg ved ikke om Full text search er mangelfuld, eller om det bare er mig, der ikke kan finde noget dokumentation om dette problem.
Jeg skal bruge et søgefelt på min side, så man kan søge produkter frem. Dertil bruger jeg FREETEXT, f.eks.:
select * from products where Freetext(Products.*, 'røde frugter')
Problemet er så, at den returnerer alle rækker, hvor der enten står "røde" ELLER "frugter" i de kolonner, der er indexeret. Jeg vil kun have returneret de rækker hvor ALLE ord er til stede. Hvordan gør man det?
Alternativt har jeg prøvet at bruge ranking med FREETEXTTABLE, så de mest brugbare resultater i det mindste står øverst, f.eks.:
select * from products INNER JOIN FREETEXTTABLE(products, ProductName, 'røde frugter') AS KEY_TBL ON products.Id= KEY_TBL.[KEY]; order by rank desc
Men problemet er her, at man kun kan definere én kolonne at søge i, så det giver ikke det korrekte resultat
Nogen der kan hjælpe? Jeg vil helst have en løsning på det første problem, men hvis det bare ikke kan lade sig gøre, så i det mindste en løsning på det andet problem.
På forhånd tak
PS. Jeg har selv tænkt på at lave en kolonne, hvor jeg samler samlige felter i en stor tekststreng, putter den i et felt for sig selv, og indexerer på kolonne. Men det vil spilde en masse plads, så det vil jeg helst undgå.
Ok, dit første forslag vil jeg prøve i morgen. Der kan jeg bare erstatte alle mellemrum med " AND " inden jeg sender søgestrengen ind i den stored procedure.
Dit andet forslag er jeg ikke sikker på kan lade sig gøre, da jeg ikke kender antallet af søgeord.
Hehe, det kunne godt tyde på, at Terry ikke har læst spørgsmålet :-)
Janus 007 -> Det med CONTAINSTABLE løser jo ikke rigtig problemet med at den kun kigger i den ene kolonne. Og hvad hvis der er flere søgeord, kan man så bare skrive "NEAR" mellem dem alle?
Hmm, i dag da jeg testede FREETEXT og CONTAINS, kunne jeg ikke længere skrive Products.* Der kunne jeg også lige pludselig kun vælge én kolonne. Jeg er helt sikker på, at det virkede i går... hmmm... mystisk. Ved I hvad årsagen kan være til det? Jeg har godt nok tilføjet og fjernet nogle kolonner til indexet, men de valgte kolonner nu er de samme som da jeg testede det i går.
Ang.: SELECT * FROM products WHERE CONTAINS(Products.*, 'røde AND frugter')
Den ser ud til at virke, bortset fra, at jeg ikke kan skrive Products.* mere. Fejlen er:
"Full-text table or indexed view has more than one LCID among its full-text indexed columns".
Hmm, nu har jeg kæmpet med det her i et stykke tid, og pi-hus'es løsning er nok det tætteste jeg kommer, så tak for det.
Til gengæld har jeg lige fundet ud af, at det webhotel jeg bruger (surftown) slet ikke tillader brugen af Full Text Indexing... så det har egentlig været spild af tid.......
Det var da lidt øv. Så må du finde dig et andet webhotel....
Tak for pointene, og godt nytår!
Synes godt om
Ny brugerNybegynder
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.