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

    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"

    Grazie mille per l'aiuto

  2. #2
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    http://www.risorse.net/mysql/query_full_text.asp
    CREDO che devi usare il + all'inizio, per dirgli che deve trovare TUTTE le parole..

  3. #3
    ho provato questa sintassi AGAINST(+'$searchStr'), ma non cambia nulla.

    cioè il contenuto della variabile $searchStr può contenere più parole, quindi non so se la sintassi per aggiungere il + è corretta...

    attendo delucidazioni....

  4. #4
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    La stringa di ricerca deve essere

    "+consolato +argentina"

    Tempo fa scrissi un articolo sulla ricerca full text con mysql , potrebbe interessarti dargli una lettura.

    Fammi sapere

    ciao

  5. #5
    il link non funziona....

    ma non mi hai risposto o non ho capito:

    io ricevo dal campo di ricerca $_POST['keywords'] le parole contenute in esso
    le metto all'interno della variabile $searchStr = $_POST['keywords'];

    poi la query $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";

    quello che non capisco come faccio a mettere il + davanti alle parole del campo di ricerca "consolato argentina" se sono presenti all'interno della variabile $searchStr

  6. #6
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    assurdo, non lo carica nemmeno a me, eppure prima l'ho visto..
    ora da "Error establishing a database connection"
    nel link c'era spiegato in maniera statica.. credo che a questo punto devi crearti un array delle parole con explode, e aggiugerci il + davanti.. ripeto CREDO però Razorblade ci leggerà presto e magari sarà più utile di me..

  7. #7
    Prova:

    $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";

    oppure

    $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";

    http://www.codicefacile.it/tutorials...text/category/

  8. #8
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Ciao,
    ho visto adesso che è caduto il db del mio blog, a volte succede.. spazi free...

    Come dice telegio, la soluzione sarebbe quella di fare l'explode della stringa ricevuta e mettere i '+' dove necessario.

    Ma piuttosto direi di lasciare il compito di inserimento dei vari caratteri speciali direttamente a chi utilizza il motore di ricerca, per farti un esempio, Google è compatibile con questo tipo di ricerche, e se vuoi avere dei risultati dove siano incluse obbligatoriamente 2 o più parole, devi inserire il "+" davanti ad ognuna di essa.

    Prova tu stesso,
    otterrai risultati differenti conm ognuna di queste ricerche

    "consolato argentina"

    consolato argentina

    +consolato +argentina

    ecc ecc..

    Ti ho risposto?

    Ciao

  9. #9
    sto provando a fare l'explode....



    $searchStr = $_POST['keywords'];

    $keys = explode(" ", $searchStr);
    for ($x = 0; $x < count($keys); $x++) {

    echo $keys[$x]; }

    In questo modo ricevo le parole dal campo di ricerca faccio l'explode e stampo i risultati.

    se uso come parole chiave "consolato uruguay", Il risultato che ricavo dall'explode è
    consolatouruguay.
    come faccio a separare le parole e mettere il "+" davanti ad ogni parola?

  10. #10
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    l'ultima riga è
    Codice PHP:
    echo "+" $keys[$x] . " "; } 

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 © 2025 vBulletin Solutions, Inc. All rights reserved.