Metazoeken met AND OR NOT operatoren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Carel

Carel

08/01/2008 15:18:00
Quote Anchor link
Ik heb gisteren met steun van jullie een simpel zoekmachine kunnen maken die met de OR operator zoekt in mijn trefwoorden in de database afbeeldingen. Ik zou echter liever willen zoeken met de AND en OR en NOT operatoren. Aantal mensen hebben mij full text zoeken aangeraden, maar ik wil metazoeken omdat de relevantie van resultaten bij mij zwaar weegt. De gebruiker moet dus de operatoren AND OR NOT kunnen gebruiken in 1 inputveld.

Waarschijnlijk is het veel gevraagd. Indien dat het geval is zou ik dolgraag een tutorial of voorbeeld willen doornemen. Helaas kan ik daar echter tot op heden nog niets vinden. Natuurlijk als het vrij eenvoudig uit te leggen is lees ik het graag.

Alvast bedankt!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
?>

<?php require_once("databaseconnectionuploaden.php"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Zoeken</title>
</head>

<body>

<form form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
Zoeken op trefwoord:<br>
<input name="zoeken" type="text" id="zoekenn" size="30"><p>
<input type="submit" value="zoeken">
</form>
      <?php      
      if($_SERVER['REQUEST_METHOD'] == 'POST')
      {

      $zoeken = mysql_real_escape_string($_POST['zoeken']);

$zoekexploded = explode(' ', $zoeken);
$like = "";
foreach($zoekexploded as $k=>$v) {
if($k == 0) {
$like .= "`trefwoord` LIKE '%".$v."%' ";
}
else {
$like .= "OR `trefwoord` LIKE '%".$v."%' ";
}
}

// je query dan:
$sql = "
SELECT thumbnail, trefwoord
FROM afbeelding
WHERE "
.$like."
"
;
    
$res = mysql_query($sql);

if(!$res)
{

    trigger_error(mysql_error().'<br />In query: '.$sql);
}

else
{
    if (mysql_num_rows($res) >= 1)
    {

    while ($row = mysql_fetch_array($res))
    {

    echo '<img src="'.$row['thumbnail'].'" alt="thumbnail" /></p>';
    }

    echo "<a href=\"zoeken.php\" title=\"zoek opnieuw\">zoek opnieuw</a>";
}

      else
      {
      echo "<p>Er is niets gevonden op jou zoekterm:<b> $HTTP_POST_VARS[zoeken]</b></p>";

      echo "<p><a href=\"zoeken.php\" title=\"zoek opnieuw\">zoek opnieuw</a></p>";
      }
      }
      }

      ?>

</body>
</html>
 
PHP hulp

PHP hulp

27/04/2024 19:23:06
 
Joren de Wit

Joren de Wit

08/01/2008 15:33:00
Quote Anchor link
Wat jij bedoelt zijn boolean zoekopdrachten. Hierbij heb je in MySQL wel de fulltext zoekfunctie nodig, waarbij je prima kunt sorteren op relevantie.

Een tutorial over de fulltext index:

Fulltext index in MySQL
 
Carel

Carel

08/01/2008 15:46:00
Quote Anchor link
is het niet mogelijk om met

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$zoekexploded
= explode(' ', $zoeken);
$like = "";
foreach($zoekexploded as $k=>$v) {
if($k == 0) {
$like .= "`trefwoord` LIKE '%".$v."%' ";
}
else {
$like .= "AND `trefwoord` LIKE '%".$v."%' ";
?>


te doen? Ik bedoel dus dat als gebruiker AND invoert in de invoer veld de code
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $like .= "AND `trefwoord` LIKE '%".$v."%' "; ?>
uitvoert

en bij OR invoeren
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $like .= "OR `trefwoord` LIKE '%".$v."%' "; ?>


fulltext heeft toch ook zo zijn nadelen?
 
Joren de Wit

Joren de Wit

08/01/2008 15:50:00
Quote Anchor link
Quote:
(...) omdat de relevantie van resultaten bij mij zwaar weegt
Dan ga je dus altijd fulltext gebruiken omdat dat de enige manier is om met relevantie van zoekresultaten te werken...

Verder is het nadeel van MySQL dat de fulltext index alleen in de MyISAM engine beschikbaar is. Hetgeen dus betekent dat je niet meer met foreign key constraints kunt werken omdat deze alleen in de InnoDB engine beschikbaar zijn. Bij andere databases heb je echter geen probleem, zo kent postgreSQL bijvoorbeeld TSearch2 om hiermee te werken.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.