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

    [MYSQL] ricerce full-text incomplete

    Salve, provo ad esporre in questo forum un problema che non riesco a risolvere.
    Il linguaggio di programmazione utilizzato è il PHP versione 5.0 mentre il database è un MYSQL 4.1.9.
    Sto infatti implementando un motore di ricerca all'interno del sito ed ho scelto di utilizzare il sistema Full-Text (anche se per precisione ho testato anche le query con la funzione LIKE ed ottengo lo stesso risultato).
    La query funziona bene ma il problema è che a volte trova i risultati ed a volte no.
    Se ad esempio cerco una parola come "posta", "angelo", "azienda", "fondamentale", etc. etc. i risultati vengono trovati senza problemi. Se invece ricerco una parola fittizia o inventata (che però nel campo di testo E' PRESENTE) ad esempio "baka" o "inc" o "soc" non viene trovato nulla.
    Come posso fare? Riguarda forse la scelta del charset o del collation? Attualmente ho provato ad impostarlo su utf8_generic_ci ma anche provando a cambiare charset il risultato rimane invariato.

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di marco80
    Registrato dal
    May 2005
    Messaggi
    1,357
    Forse una risposta stupida ma hai provato ad usare il like cosi'?:
    like '%parola%'
    like '%parola'
    like 'parola%'

  3. #3
    Nel metodo da te segnalato effettivamente ora la parola viene trovata, però come lo applico ad una query tipo:

    SELECT * FROM `news` WHERE MATCH(titolo,testo) AGAINST('stringacercata');

  4. #4
    Ho scoperto l'inghippo e ve lo segnalo in modo che se altri utenti avessero lo stesso problema riscontrato sanno come procedere.
    Il problema della ricerca Full-Text nasceva da due fattori:

    - le parole che hanno meno di 4 caratteri vengono ignorate nella ricerca

    - le parole che sono presenti in più del 50% delle righe dei campi inseriti vengono ignorate.

    Per quanto riguarda il punto 1 non si può fare nulla se non un controllo di inserimento nel form di ricerca.
    Il punto 2 può essere saltato utilizzando questa query:

    SELECT id, DATE_FORMAT(data, '%d-%m-%Y') AS time, titolo FROM `news` WHERE MATCH(titolo,testo) AGAINST('+stringacercata' IN BOOLEAN MODE);

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.