20. marts 2003 - 17:23Der er
8 kommentarer og 1 løsning
Sortering efter relevans
Jeg har en Access-database liggende på mit site og har en søgefunktion, der søger i databasen. Resultaterne af søgningen kommer imidlertid ud i den rækkefølge, som de bliver fundet.
Jeg vil gerne have, at de bliver sorteret efter relevans i stedet.
Kan man lave en sådan funktion uden at skulle lave noget om i min eksisterende database og hvordan ser søgestrengen ud?
Du må nok lige først definere hvad du mener med relevans.
Og så skal det siges at Access baser ikke er det bedste (hurtigste) at søge i, hvis man har store tekster. Access kan heller ikke automatisk returnere en relevans, så du skal selv definere din relevans.
Som en simpel form for relevans kunne man fx kigge på hvor ofte et ord optræder i en record, eller om alle ord optræder i en record.
Den første er besværlig og tung i Access, og nummer to giver kun mening hvis du søger med fx WHERE Teksten LIKE '%ord1%' OR Teksten LIKE '%ord2%'
Hvordan laver man så en søgestreng, der kan klare flere ord i søgefeltet, således at resultaterne sorteres så dem, hvor alle ordene i søgestrengen optræder flest gang, kommer først?
Først splitter du den op i de individuelle ord, og for hvert ord laver du (instr(teksten,'ordet')>0) og lægger dem sammen. (instr(teksten,'ordet')>0)+(instr(teksten,'ordto')>0)+(instr(teksten,'ordtre')>0) Resultatet bliver et negativt tal, så den skal også sorteres med DESC.
Problemet bliver så at kombinere de to metoder. Her må man lave en beregning som vægter det at flere ord optræder, overfor det at et ord optræder mange gange.
Du kan få antallet af gange ordet optræder i teksten med: (Len(teksten)-Len(Replace(teksten,'ordet','')))/len('order') Den division burde faktisk have været med i den første, så lange ord ikke vægtes højere en korte ord.
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.