problema con motore di ricerca full text

ciao,

ho un problema con un motore di ricerca interno che sto cercando di perfezionare.

$sql = "SELECT *, MATCH(note, nome_servizio, sottotitolo) AGAINST('$searchStr') AS attinenza FROM tbl_servizi WHERE MATCH(note, nome_servizio, sottotitolo) AGAINST('$searchStr') ORDER BY attinenza DESC";

questa query per la ricerca full text funziona solo che non soddisfa completamente il modo in cui mi restituisce i risultati.

cosa succede: ad esempio, se nel campo di ricerca inserisco le parole "consolato argentina", quello che mi stampa come risultato č si il consolato di argentina, ma anche tutti i record che hanno la parola "consolato", mentre a me serve che mi restituisca solo i risultati  che contengono le parole "consolato argentina"

mi spiego?

Grazie mille per l'aiuto

inviato 5 anni fa
iTek
iTek
1
X 0 X

Prova a vedere questo articolo:

http://devzone.zend.com/article/1304

E' datato ma spiega l'utilizzo di alcuni operatori che puoi utilizzare per migliorare la tua ricerca.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Devi usare la ricerca full text "IN BOOLEAN MODE"

http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html

Se il progetto a cui stai lavorando č serio ti consiglio di adottare un motore di ricerca esterno al database, ad esempio Sphinx.

 :bye:

risposto 5 anni fa
Gianni Tomasicchio
X 0 X

Allora, ho provato a modificare la query in :

$sql = "SELECT *, MATCH(note, nome_servizio, sottotitolo) AGAINST('$searchStr' IN BOOLEAN MODE) AS attinenza FROM tbl_servizi WHERE MATCH(note, nome_servizio, sottotitolo) AGAINST('$searchStr') ORDER BY attinenza DESC";

ma non cambia nulla. il problema č che devo aggiungere gli operatori "+" davanti a ogni parola che ricevo dal form di ricerca. La stringa che ricevo č contenuta in $searchStr:

$searchStr = $_POST['keywords'];

Mi sembra di capire che l'unico modo per poter aggiungere l'operatore "+" davanti ad ogni parola, č quello di fare l'explode della stringa.

io ho provato a fare una cosa del genere:

$keys = explode(" ", $searchStr);

for ($x = 0; $x < count($keys); $x++) {

$chiave =' "+" . $keys[$x] . " "'; }

ma non so come continuare per inserire la stringa con l'operatore dentro la query, cioč in AGAINST('$var IN BOOLEAN MODE)

risposto 5 anni fa
iTek
iTek
1
X 0 X

Puoi usare anche str_replace per sostituire gli spazi bianchi con i caratteri desiderati.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

tu dici questo?

$searchStr = $_POST['keywords'];

$dati = str_replace(" ", " +",$searchStr);

risultato di $dati: consolato +argentina

funziona con la seconda parola, ma la prima?

risposto 5 anni fa
iTek
iTek
1
X 0 X

Semplicemente ci aggiungi un + davanti quando crei la stringa, non č difficile:

$stringa = '+'.$stringa;
risposto 5 anni fa
Mario Santagiuliana
X 0 X

mannaggia... a volte mi perdo proprio in un bicchier d'acqua...

Grazie, funziona tutto ( almeno a prima vista....  :))

risposto 5 anni fa
iTek
iTek
1
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda