Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Migliorare motore di ricerca interno

    Ciao.

    Sto utilizzando questo script per un mdr interno:

    <?
    include("news/config.inc.php");

    $db = mysql_connect($db_host, $db_user, $db_password);
    if ($db == FALSE)
    die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");
    mysql_select_db($db_name, $db)
    or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");

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

    $query = "";
    reset ($keys);
    while (list(,$parola) = each ($keys))
    { $parola = trim($parola);
    if ($parola != "")
    $query .= "titolo LIKE '%$parola%' OR toptesto LIKE '%$parola%' OR testo LIKE '%$parola%' OR ";
    }
    $query .= "0";

    $query = "SELECT * FROM news WHERE " . $query;

    $result = mysql_query($query, $db);
    while ($row = mysql_fetch_array($result))


    ... dove $chiave è l'input proveniente dal box di ricerca.

    Come mdr (per quello che mi serve) non è male.
    Tuttavia ha un difetto: se ad esempio nell'articolo pubblicato c'è la parola cartella stampa e l'utente ricerca stampa cartella l'articolo non viene trovato. Se invece l'utente ricerca cartella stampa l'articolo viene trovato correttamente.

    Come si può fare per ovviare a questo problema?

    Grazie

  2. #2
    io l'ho fatto diversamente..
    ovvero prendo il post della parola:

    $array = explode(" ",$_POS["testo_ric"]); //mi estraggo tutte le parole
    $w = "";
    foreach ($array as $p)
    {
    $w.= " AND ((LOCATE(LCASE('$p'),LCASE(campo_ricerca))) OR (LOCATE(LCASE('$p'),LCASE(campo_ricerca_2))));
    }

    $sql = "SELECT BLA BLA WHERE stato = 1 $w";

    ed ecco che avrai tutti gli elementi con quelle parole che hai cercato
    ...::: DESIDERARE E' UMANO :::...
    ...::: POSSEDERE E' DIVINO :::...
    ...::: HAVE A NICE DAY :::...
    (¯`·.¸¸.->ĐĮ ĦΞŁŁ<-.¸¸.·`¯)
    http://www.djhellclub.com

  3. #3
    Ti ringrazio per l'aiuto, tuttavia anche con quel codice avevo problemi.

    Alla fine ho risolto così:

    $chiave = str_replace("'", "''", $chiave);
    $chiave = stripslashes($chiave);

    $query = "SELECT *, MATCH(titolo, testo, toptesto) AGAINST ('$chiave' IN BOOLEAN MODE) AS score FROM news WHERE MATCH(titolo, testo, toptesto) AGAINST ('$chiave' IN BOOLEAN MODE) ORDER BY score DESC";


    Il tutto farcito da "fulltext" nel database mysql.

    Mi servire però un altro aiuto.
    Come potete vedere sulla $chiave proveniente dal box di ricerca effettuo un doppio controllo: l'eliminazione degli "/" e la sostituzione dell'accento singolo con uno doppio per consentire la ricerca delle parole accentate.
    E fin qui tutto bene.
    Oltre alle due correzioni summenzionate c'è qualche altro controllo che bisogna operare per migliorare la ricerca?
    Secondo: come si può fare per estrarre e visualizzare solo i termini ricercati e quelli contigui? Alla maniera di Google intendo, che una volta inviata la ricerca restituisce una breve descrizione della pagina evidenziando i termini ricercati più le parole vicine, fino ad un tot di parole.

    Grazie e spero di non chiedere troppo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.