Newsgroup: it.comp.www.php
Titolo: Problema con script Motore di ricerca full text

Ciao, vorrei realizzare un motore di ricerca all'interno di una tabella
entro un database.
Il database si chiama mio_database
La tabella all'interno di mio_database si chiama guestbook
La tabella contiene 4 campi con indici Full Text (creata tramite phpMyAdmin)
3 di testo VARCHAR ed uno INT (AI)
Lo script che avrei preparato � il seguente per� non mi funziona.
Sareste cos� gentili da darmi una mano nell'aggiustarlo per farlo cos� 
funzionare?
Ecco lo script:
<form action='cerca.php' method='POST'>
<b>Ricerca su contenuto guestbook</b><br>
<input type='text' name='cerca'><br>
<input type='submit' value='Ricerca'>
</form>
<?php
$db_host = "localhost";
$db_user = "root";
$db_password = "";
$db_name = "mio_database";
$db = mysql_connect($db_host, $db_user, $db_password) or die ('Errore
durante la connessione');
mysql_select_db($db_name, $db) or die ('Errore durante la selezione del
db');
$cerca = $_POST['cerca'];
if ( $cerca == TRUE && $cerca != "" ) {
if ( strlen($cerca) >= 3 ) {
$cerca =  mysql_escape_string(stripslashes($cerca));
$query = "SELECT * FROM guestbook WHERE MATCH (messaggio) AGAINST
('$cerca')";
$risultato = mysql_query($query) or die (mysql_error());
$risposta = mysql_query($query) or die ("Utilizza termini pi� specifici!");
$dentro_la_query= mysql_fetch_assoc($risposta);
if ( $dentro_la_query == TRUE ) {
while($row= mysql_fetch_assoc($risultato)) {
$nome = $row['nome'];
$sito_web = $row['sito_web'];
$messaggio = $row['messaggio'];
$ID = $row['idmessaggio'];
echo "Numero: $ID<br>";
echo "Nome: $nome<br>";
echo "Sito Web: <a href='$sito_web'>$sito_web</a><br>";
echo "Messaggio : $messaggio<br>";
echo "<br>" ;
}
} else {
echo "Nessun temine alla ricerca trovato";
}
} else {
echo "Devi inserire almeno 3 caratteri";
}
} else {
echo "Non hai compilato il modulo ricerca";
}
?>

 $risposta = mysql_query($query) or die ("Utilizza termini più specifici!");


 jumpaolo
Allora intanto devo dirti grazie infinite per il tuo aiuto!
Entrambi i codici funzionano diciamo per� parzialmente.
Nel senso che vanno bene se parolaRicercata � una parola intera che si trova
all'interno del campo.
Se invece uso una parola con 3 o 5 o pi� caratteri (parola non completa)
non mi trova nulla.
Quindi c'� qualche altra cosa che devo sapere per ricercare ad esempio delle 
parole che contengono 3 caratteri contenuti in una parola (o frase)?
Ciao e grazie ancora :-)

Scusa ho ricontrollato adesso, il codice funziona con testo minimo di 4
lettere!
Grazie ancora per il tuo aiuto!
Ciao

 
Ciao,
se non ho capito male tu vorresti ricercare porzioni di parole all'interno
de tuo indice. Se è questo che vuoi, puoi utilizzare due tipi di ricerca ovvero:
1. Ricerca per Wildcard (*):
Questo ti permette di utilizzare un carattere speciale per identificare un
insieme di caratteri. Questa è utilizzabile nelle ricreche IN BOOLEAN MODE 
vedi: 
http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html
 e 
ricerca la parola wildcard all'interno del testo.
Ricordati che anche qui valgono alcune regole, ovvero non puoi utilizzare il
simbolo * postpost ad un certo numero di caratteri (anche questo dipende
dalla configurazione di mysql)
2. Ricerca Fuzzy.
questa ricerca non fa altro che restituire tutti quei record che presentano
la parola stessa ed eventuali record che potrebbero avere un associazione
con la parola ricercata. 
Per implementare una ricerca di questo tipo 
vedi: 
http://dev.mysql.com/doc/refman/5.5/en/fulltext-query-expansion.html
basta modificare solo il mode di ricerca. Anche in questo caso esisto no
delle regole che devi considerare.
Buona giornata.
Jumpaolo