18. januar 2005 - 11:33Der er
19 kommentarer og 1 løsning
Hjælp til FULLTEXT indexering
Jeg en grum sql-sætning som jeg gerne skal have opdateret min database til at søge på. Da jeg bruger "%xxx%" søgning er jeg blevet oplyst at jeg skal bruge FULLTEXT indexering, men hvilke kolonner skal jeg indexere, og hvor dan forgår det?
Jeg har nu kigget i en af de artikler og fundet en guide, problemet er at jeg under punktet "Full-text Catalogs" i EM ikke kan vælge "Full-text Catalog.." den er grå. Hvad er der galt?
To get started, you need to add a full-text catalog to your database. The easiest way to do this is to open SQL Server Enterprise Manager and expand the node for your database to find the Full-Text Catalogs node (if that node isn't present, check to make sure that the Microsoft Search Service is installed on the server).
Ja og det er der jeg er nået til, Jeg har punktet "FULL-text Catalog.." men kan ikke oprette en ny. Hvis den ikke er installeret hvorfor er punktet der så, og hvordan installere jeg den?
Hej, Prøv i Enterprise Manager at højreklikke på en af dine tabeller. Her får du en menu, der hedder "Full-text Index Table". Det er ad denne vej, at du indexerer din tabel. Det kræver, at tabellen har en primærnøgle (eller anden unique constraint). I slutningen af wizard'en skal du specificere et katalog - det kommer til at ligge under "Full-text Catalogs" i EM (hvor du har kigget). mvh. Veronica
Det kan dog også være fordi, du ikke har startet fulltext servicen. Prøv i EM at højreklikke på "Full-text search" i mappen "Support services" og vælg "start". Når servicen kører, vises en grøn pil frem for den røde cirkel. mvh. Veronica
Nå man nu har jeg fået det sat op, jeg kunne af en eller anden grund kun sætte det op fra EM på SQL-serveren, også selv om jeg logger på med samme brugernavn og adgangskode fra EM på min egne maskine.
Jeg har nu prøvet at fyrre samme sql-sætning af igen, og jeg har hentet ca 3 - 5 sek. men søgningen tager stadig 30 sek. Skal man skrive sin sql-sætning om når man bruger FULL-text catalog? Kan man evt bruge FREETEXT, FREETEXTTABLE, CONTAINS, CONTAINSTABLE ?
Der skulle ikke være noget i vejen for, at du sætter din fulltext kataloger op i en remote EM.. (?)
Anyway - nu ved jeg ikke, hvilken SELECT statement, du bruger - men du skal lige præcis bruge FREETEXT, FREETEXTTABLE, CONTAINS, eller CONTAINSTABLE. Bruger du almindelig LIKE-operator, bliver dit fulltext index ikke brugt. Til gengæld får du også en masse nye muligheder ved at bruge FREETEXT eller CONTAINS frem for LIKE, fx vægtning af dine søgeord, at der søges efter ord i andre former, etc. Læs evt. mere her: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql90/html/sql2005ftsearch.asp
Det lyder som om, du ikke er færdig med at sætte din fulltext indexing op .. Efter at have defineret dit katalog, skal du populere det - det gøres i samme højre-klik menu fra tabellen, og du vælger "Start full population". Herefter skal du vente lidt, inden du prøver din query igen (du kan følge med under "fulltext catalogues"). Jeg pleger også at vælge "Change tracking" (samme menu), for så tilføjes ændringer i data automatisk til fulltext indexet. Om ikke andet bør du have et populerings-schedule defineret, fx. at den hver morgen regenerer indexet. (Det gjorde du, da du kørte wizard'en, hvor du definerede full-text indexet).
Du vil nok aldrig få 100% samme funktionalitet som i en LIKE-statement.. Fulltext er ikke en erstatning for LIKE, men en helt ny måde at søge på, hvor man søger på forskellige former af ordene (ie. 'run' søger også på 'runs' og 'ran' men ikke 'trunk'). Men nu du siger (bord)ben bliver jeg usikker på, hvordan det fungerer på dansk - det ved jeg ikke, hvordan man sætter op - muligvis et add-on? Hvis du søger på danske ord, vil der (som regel) ikke være nogle engelske bøjninger, og derfor finder den kun det eksakte ord.
Jeg fandt ud af en anden måde at skrive det på så den fandt flere resultater:
contains(etEllerAndet , ' "*XXX*" ')
Men jeg har droppet fulltext indexering igen. Jeg fandt nemlig ud af at hvis jeg brugte DISTINCT i min sql-sætning blev søgetiden minimal!
Nå men nu ved jeg da hvordan Fulltext indexering fungere, så veronica smid et svar så er der nogle velfortjente point og tak for hjælpen! Der skal også lyde en tak til arne_v, den her gang må du undvære point men du har jo også riglig ;-)
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.