[Mysql] Full-text Search

Pagina: 1
Acties:

  • me1299
  • Registratie: Maart 2000
  • Laatst online: 10:30

me1299

$ondertitel

Topicstarter
Hoi, ik ben bezig met een website voor mijn divx verzameling. Gaat allemaal heel leuk enzo.

Alleen nu willen graag een search optie inbouwen.

Ik heb een table divxlist:

+----+-------------------+-----+
| Id | Name | Cds |
+----+-------------------+-----+
| 22 | The Mask of Zorro | 1 |
| 20 | Black Knight | 1 |
+----+-------------------+-----+

Alleen als ik nu een query doe:

SELECT Id,Name,Cds FROM divxlist WHERE Name LIKE'%Mask Zorro%';

Dan krijg ik geen resulst omdat het achter elkaar staat.

Nu las ik ergens iets over full-text search.

Ik heb deze pagina er op na gelezen: http://www.mysql.com/doc/F/u/Fulltext_Search.html

Alleen snap ik er nu nog geen ruk van. Mijn table bestaat al en ik heb de volgende ALTER query gedraaid:

ALTER TABLE divxlist ADD FULLTEXT(Name);

Oke, maar als ik nu

SELECT * FROM divxlist WHERE MATCH (Name) AGAINST ('Zorro');

doe krijg ik geen resulst :?

Weet iemand misschien waar ik de mist in ga :?

Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen


  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

Om resultaten van een FULLTEXT search te krijgen heb je minimaal 3 rows nodig. Jij hebt er 2 in je tabel.

This can no longer be ignored.


Verwijderd

SELECT Id,Name,Cds FROM divxlist WHERE Name LIKE'%Zorro%';

werkt wel lijkt me? Die eerste werkt iig niet omdat 'Mask Zorro' (met of zonder voor- en achtervoegsels) niet in de table voorkomt.

Waarom die 2e niet werkt zou ik niet weten, ben nog niet heel erg bekend met MySQL.

Verwijderd

je moet de query string splitten zodat je een array woorden krijgt.
die array gebruik je om een standaard where clause op te bouwen.

select a,b from c where a like '%mask%' or a like '%zorro%';

  • me1299
  • Registratie: Maart 2000
  • Laatst online: 10:30

me1299

$ondertitel

Topicstarter
Op maandag 13 mei 2002 23:06 schreef Erik Jan het volgende:
Om resultaten van een FULLTEXT search te krijgen heb je minimaal 3 rows nodig. Jij hebt er 2 in je tabel.
hehe :D

Verekt joh, het werkt gelijk!

Waarom moeten er eigenlijk perse 3 velden zijn :? :Y)

Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen


  • me1299
  • Registratie: Maart 2000
  • Laatst online: 10:30

me1299

$ondertitel

Topicstarter
Op maandag 13 mei 2002 23:14 schreef iskander het volgende:
je moet de query string splitten zodat je een array woorden krijgt.
die array gebruik je om een standaard where clause op te bouwen.

select a,b from c where a like '%mask%' or a like '%zorro%';
Zo wou ik het eerst ook gaan doen, maar Full-text search is toch wat makkelijker.. daar wordt dat zeg maar voor je gedaan.

Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen


Verwijderd

Is die fulltext kolom ook beschikbaar in andere rdbms systemen ?
Lijkt me in voorkomende gevallen iets ter overweging.

  • RobzQ
  • Registratie: Februari 2000
  • Laatst online: 21-12-2020

RobzQ

greedy as a pig

Op maandag 13 mei 2002 23:15 schreef DeathKnight het volgende:
[..]
Waarom moeten er eigenlijk perse 3 velden zijn :? :Y)
Drie is het minimum omdat mySQL zelf een soort van 'common words' list opbouwt. Woorden die in 50% van de doorzochte records voorkomen zijn waarschijnlijk 'common words' (de het een er is zijn enz enz)..

Met twee records komt ieder woord zeker in de helft van het aantal records terug en dus ziet mysql alle woorden als common words.. En geeft ie niks terug als je zoekt.

..so be wary of any man who keeps a pig farm..


  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Hmm ik zie dat het al werkt?

Maargoed, misschien is dit ook een oplossing:
PHP:
1
<?Pagina aanroepen met bijv. pagina.php?zoekterm=ik zoek+wat<?php  $zoekterm = $HTTP_GET_VARS['zoekterm'];  $zoekterm = str_replace(' ', '+', $zoekterm);  $zoekterm = preg_replace('/\++/', '+', $zoekterm);  if ( (!isset($zoekterm)) or ($zoekterm == '') )  { // ALS er nix te zoeken valt.    $ztq = '';   } else   { // Hier wordt de zoek query gemaakt    $tq = explode("+", $zoekterm); $ztq = '';    foreach($tq as $waarde)    {      $ztq .= ' AND (';      $ztq .= ' name LIKE "%'. $waarde. '%"';      $ztq .= ' OR info LIKE "%'. $waarde. '%"';      // etc. etc. etc.      $ztq .= ') ';    }  }  $result = mysql_query("SELECT * FROM TABEL ". $tmpwhere. $ztq. " ORDER BY name"; while($row = mysql_fetch_array($result)) {  if ( ($zoekterm <> '') and (isset($zoekterm)) )  {   foreach($tq as $waarde)     $row = preg_replace('/'. $waarde. '/i', "<b class=head". $color. ">". $waarde. "</b>", $row);  }  $info = processmessage($row['info'], $color);?>

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Verwijderd

Ik weet het niet zeker hoor maar werkt dit ook niet :
SQL blabla LIKE "%Mask%Zorro%" sql blabla

En het hele hoofdletter/kleine letter geneuzel ... Hoe zit dat ook al weer ?

Anton

  • me1299
  • Registratie: Maart 2000
  • Laatst online: 10:30

me1299

$ondertitel

Topicstarter
Sorry voor het omhoogschoppen van mijn topic maar ik wou jullie alsnog bedanken. Want mijn site draait nu online:

http://divx.gaap.nl

Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen

Pagina: 1