Avatar billede dugi Nybegynder
11. februar 2006 - 14:57 Der er 15 kommentarer

søgefunktion med % i relevans - hvordan?

Hejsa,

Jeg har fået lavet en søge maskine, men jeg kunne godt tænke mig at få den til at vise, hvor relevant de fundende resultater er til det søgeord, som brugeren indtastede.

Et godt eksempel er Eksperten selv, når du søger på en tråd, viser den en grå bar med hvor relevant resultaterne er til det indtastede søgeord.

Nogen som har en idé, eksempler eller et færdigt script, som de vil dele med mig? :)

Der er 60 point, lige ned i lommen, til den erfarne og vellykkede koder :D

På forhånd tak.

Med venlig hilsen
Morten
Avatar billede Slettet bruger
11. februar 2006 - 14:59 #1
Med MySQL kan du bruge Fulltext-indexes:

http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
Avatar billede Slettet bruger
11. februar 2006 - 15:02 #2
Lidt uddybende:

Du laver et fulltext-index på de felter der skal søges i. F.eks. [title] og [description].

I dit SQL query laver du så:

SELECT id, title, description,
      MATCH(title, description) AGAINST ('søgeord her') AS relevance
FROM table
WHERE MATCH(title, description) AGAINST ('søgeord her') HAVING relevance > 0
ORDER BY relevance DESC
LIMIT 0, 100
Avatar billede dugi Nybegynder
11. februar 2006 - 15:05 #3
Hvad gør man så hvis man ikke kører MySQL 5.0? :/
Avatar billede Slettet bruger
11. februar 2006 - 15:09 #4
Det er lige meget. Det virker også i 4.x
Avatar billede dugi Nybegynder
11. februar 2006 - 15:12 #5
Perfekt - jeg tester lige så :D
Vender straks tilbage..
Avatar billede Slettet bruger
11. februar 2006 - 15:12 #6
Avatar billede dugi Nybegynder
11. februar 2006 - 15:30 #7
Hmm - jeg får denne fejl hele tiden; "Can't find FULLTEXT index matching the column list"
Avatar billede Slettet bruger
11. februar 2006 - 15:32 #8
Det er fordi du skal lave et fulltext index der matcher kolonnelisten, hehe.
Det skal dække over de felter du bruger i din MATCH().
Avatar billede Slettet bruger
11. februar 2006 - 15:34 #9
Altså, du skal ikke have et fulltext index til hvert enkelt felt, men kun ét enkelt fulltext index der dækker alle felter (og ikke flere) som du bruger.

I PhpMyAdmin (hvis det er det du bruger) redigerer du dit index ved at klikke på (edit/rediger/blyant-ikon) udfor indexet under tabelstrukturen.
Avatar billede dugi Nybegynder
11. februar 2006 - 15:34 #10
det gør de også - her er min string:

$search_sql = mysql_query('SELECT id, username, MATCH(username) AGAINST (\''.$_SESSION['cssforum']['search'].'\') AS relevance FROM css_users WHERE MATCH(username) AGAINST (\''.$_SESSION['cssforum']['search'].'\') HAVING relevance > 0 ORDER BY relevance DESC') or die(mysql_error());
Avatar billede Slettet bruger
11. februar 2006 - 15:41 #11
Hvorfor laver du 2 x single-quotes omkring din variabel og escaper den yderste?
Avatar billede dugi Nybegynder
11. februar 2006 - 15:45 #12
Hehe fordi jeg starter min query med single-quote også skal men escape :P

Men nu har jeg lavet mit felt (username) til FULLTEXT, men nu viser den hverken username eller relevance i min løkke :/
Avatar billede Slettet bruger
11. februar 2006 - 15:51 #13
Yes, men du skal vel ikke bruge 2 x single-quotes alligevel? :)

Jeg tror jeg har misforstået dit spørgsmål. Du vil søge med wildcard i et felt der kun indeholder ét ord (et brugernavn) og have relevans?
Det giver ikke så meget mening for mig?
Man kan ikke søge på brudstykker af ord med FULLTEXT indexes. Det er beregnet til søgemaskine-agtig funktionalitet. Og relevansen vil vel altid bare være enten/eller når der kun er ét ord?
Avatar billede dugi Nybegynder
11. februar 2006 - 15:57 #14
Ville bare kunne udskrive (i %) hvor stor relevans den "fundne" post på min nuværende søgestreg er :)

Min søgestreg:

$search_sql = mysql_query('SELECT id, heading AS output FROM css_forum_topics WHERE heading LIKE \'%'.$_SESSION['cssforum']['search'].'%\' ORDER BY id DESC');
Avatar billede Slettet bruger
11. februar 2006 - 17:52 #15
Jeg er ikke med på hvad der ikke virker.
Hvad hedder din tabel og dine felter helt præcist?
Hvilke indexes har du lavet for hvilke felter?
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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