Avatar billede mercutio Nybegynder
30. juni 2003 - 15:59 Der er 7 kommentarer og
2 løsninger

anvanceret sql sætning til søgemaskine..

Jeg skal lave en søgning som hvor man f.eks. kan søge på
"at flyve med drager"

den skal så gå ned i en tekst og finde i denne rækkefølge.

1: tekster med teksten "at flyve med drager" sorteret efter hvor mange gange teksten står i feltet
2: tekster med "at" og/eller "flyve" og/eller "med" og/eller "drager
sorteret efter hvor mange af ordene den finder og hvor mange gange de findes. Den skal hellere vise den post hvor alle ordene er med kun en gang frem for den som har drager med 100 gange.

Er det noget der kan laves i en sql?

På forhånd tak.
Avatar billede morw Nybegynder
30. juni 2003 - 16:31 #1
Kig på full-text search. Evt i BOOLEAN MODE (version > 4.0.1). Det er den mest advancerede søgning du kan lave i MySQL.

En full-text search kan sorteres efter relevans

http://www.mysql.com/doc/en/Fulltext_Search.html
http://www.mysql.com/doc/en/Fulltext_Fine-tuning.html
http://www.mysql.com/doc/en/Fulltext_Restrictions.html
Avatar billede mercutio Nybegynder
30. juni 2003 - 17:45 #2
jeg er ikke helt med på den kan du hurtigt lave et simpelt eksempel... Jeg fulte dit link og der ser det ud som om jeg skal lave en temp. tabel hvor jeg indsætter det jeg vil søge på og så lave en match mellem de to tabeller...
Avatar billede jakobandersen Nybegynder
30. juni 2003 - 18:09 #3
Hvis du mener at det er 100% nødvendigt at lave den operation i databasen og ikke i forretningslogikken vil jeg anbefale dig at lave en User Defined Function i C(++) som behandler teksten og returnerer antallet af ord.

Du kan se her hvordan du installerer din funktion:
http://www.mysql.com/doc/en/UDF_compiling.html
Avatar billede mercutio Nybegynder
30. juni 2003 - 18:18 #4
jeg har ikke så meget forstand på databaser men masser af forstand på kode. Troede det ville gå stærkere så længe det blev gjort på database niveau derfor ville jeg gerne have det til at ske i min sql sætning...
Avatar billede jakobandersen Nybegynder
30. juni 2003 - 18:23 #5
Nu ved jeg ikke lige hvilket system det er du arbejder på men det kunne være en ide at se på hvor man har overkapacitet om det er på DB-Server eller i applikationsdelen.
Avatar billede mercutio Nybegynder
30. juni 2003 - 18:24 #6
det er ren amatør jeg kører på en server hos buydomains.dk så jeg ved ikke hvor jeg har overskud.... men jeg vil da tro deres database maskine må være et ordenligt monster...
Avatar billede mercutio Nybegynder
30. juni 2003 - 18:29 #7
men forklar lige den her

SELECT KODE_ID, KODEN, FORFATTER_ID, RETTET_AF, OPR_TID, RET_TID, SPROG, PROGRAM FROM kode WHERE MATCH (KODEN) AGAINST('en')

efter mit select er mit resultset tomt... og der er masser af koder som har ordet "en" i sig
Avatar billede detox Nybegynder
30. juni 2003 - 21:47 #8
Måske fordi ordet forekommer i over havldelen af dine poster og så ikke kommer i betragtning.
Avatar billede mercutio Nybegynder
01. juli 2003 - 08:22 #9
Jeps det var det detox... nu har jeg læst lidt mere om søgningen og har fundet ud af den faktisk skulle være ret langsom. Hvad gør andre med store databaser hvis de skal lave lignende søgninger?
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