Avatar billede laksen Nybegynder
20. marts 2003 - 17:23 Der 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?
Avatar billede mortrr Praktikant
20. marts 2003 - 18:22 #1
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%'

Så - hvad forstår du ved relevans?
Avatar billede terry Ekspert
20. marts 2003 - 20:13 #2
"relevans" If you have  a specific field that contains some information "relevans" then

SELECT * from YourTable ORDER by TheRelenanceField
Avatar billede terry Ekspert
20. marts 2003 - 20:14 #3
.
Avatar billede laksen Nybegynder
21. marts 2003 - 01:44 #4
mortrr>> Ved relevans tænkte jeg umiddelbart på hvor mange gange ordet optrådte i en søgning. Hvordan foretages sådan en søgning?

Hvad er alternativerne? Skal man i så fald skifte til en mysql-database eller lign.?
Avatar billede laksen Nybegynder
21. marts 2003 - 01:45 #5
terry>> Det var ikke lige det jeg mente....
Avatar billede mortrr Praktikant
21. marts 2003 - 09:25 #6
Når du siger "ordet", så kan det godt lade sig gøre.
Det bliver lidt mere besværligt hvis det er flere ord.

Sorter faldende på:
Len(teksten)-Len(Replace(teksten,'ordet',''))
Jo flere gange ordet optræder, jo større bliver forskellen.
Avatar billede laksen Nybegynder
21. marts 2003 - 10:48 #7
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?
Avatar billede mortrr Praktikant
21. marts 2003 - 10:58 #8
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.
Avatar billede laksen Nybegynder
21. marts 2003 - 11:18 #9
takker, nu har jeg vist noget at gå videre med...
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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