Ik ben bezig met een zoekscript. Ik heb een en ander zelf getest, maar stuit op een aantal zaken waarbij ik hulp nodig heb.

- Welke manier van zoeken moet ik gebruiken. Ik heb iets gelezen over fulltext search, maar dit schijnt alleen met Myisam tabellen te werken. Ik werk met innodb tabellen (heb namelijk een grote database die zeer frequent benaderd wordt) dus dat kan dan kennelijk niet.
- Ik snap het principe van zoeken met een query in een database met bv
LIKE '%$Var%'
Dit werkt echter, maar met één zoekterm. Tenminste ik zie niet hoe ik dit met meerdere zoektermen moet doen als ik ook de mogelijkheid wil bieden om op alle termen (AND) of één van de termen (OR) te zoeken. Hoe los ik dat op, hier kan ik nergens info over vinden, en snap het zelf helaas niet :(
- Vaak zie je resultaten gesorteerd op relevantie. Ik begrijp dat relevantie bij de zogenaamde fulltext search ondersteund wordt, maar die kan ik dus niet gebruiken. Is er een andere manier om relevantie van zoekresultaten te bepalen?

- Kortom wat is de beste manier van zoeken in een grote database (met innodb tabellen) die vaak benaderd wordt (performance is dus belangrijk) als ik gebruik van AND en OR beschikbaar wil stellen en tevens relevantie wil kunnen bepalen? Iemand met tips, links, eigen ervaringen en of boorbeelden?

Ik zou er zeer mee geholpen zijn, want alle verschillende mogelijkheden die ik tegenkom brengen me een beetje aan het duizelen :(
Met InnoDB heb ik geen ervaring, maar het schijnt dat je de fulltext search die mysql wel heeft vrij makkelijk kunt nabouwen in InnoDB. Op yapf schijnt een tutorial te staan, maar die heb ik zelf nog niet kunnen ontdekken.

Je kan een query die AND of OR gebruikt overigens ook zelf samenstellen. Je maakt dan eerst een beginquery en vervolgens kijk je op welke waarden gezocht moet worden.

Bv.:
<?php
$sql = "SELECT * FROM table WHERE 1=1 ";

if(isset($_POST['waarde_1'])) {
$sql .= "AND veld_1 LIKE '%" . $waarde_1 . "%'";
}

if(isset($_POST['waarde_2'])) {
$sql .= "OR veld_1 LIKE '%" . $waarde_2 . "%'";
}

if(isset($_POST['waarde_3'])) {
$sql .= "AND veld_2 LIKE '%" . $waarde_3 . "%'";
}

mysql_query($sql);
?>

Het is iig belangrijk dat je een beetje creatief bent :) Zo kan je de AND en OR ook in een variabele zetten, zodat de gebruiker zelf kan kiezen of bepaalde keuzes allebei of ook apart mogen voorkomen.

En nog een tip: als je je query samenstelt en je komt er niet uit, kan je er goed aandoen om de query even naar het scherm te printen. Dat voorkomt vaak een hoop zoekwerk.
Bedankt, de opzet die je geeft kan ik denk ik goed gebruiken. Is er ook nog een manier om de relevantie te bepalen en hierop te sorteren?

Ik zal in ieder geval eens gaan zoeken naar het nabouwen van die fulltext search. Is fulltext search eigenlijk de optimale manier van zoeken? Is het veel beter sneller dan 'normaal' zoeken? Zijn er nog andere speciale zoekmethodes die de verwerkingstijd en/of de resultaten ten goede komen?
Als ik me niet vergis kon je die relvantie ook bepalen met de Fulltext-search. Maar dat ben ik niet zeker.

Er zijn vast nog wel snellere zoekmethodes (zoeken op gelijk aan, ipv lijkend op), maar je moet altijd kijken of je daar wat aan hebt. Beter een goed werkend, 'langzamer' systeem dan een snelwerkend, 'slecht' systeem.
In de meeste gevallen maakt het allemaal niet zo veel uit, omdat het samenstellen van de pagina (door PHP en de achterliggende programma's als MySQL of een andere database) een fractie van de tijd inneemt die het versturen van de server naar de client kost.

Elwin

Reageren