Ho una tabella molto grossa (+ di 500.000 campi circa 400 MB)con vari campi tra cui due dove effettuo la ricerca con fulltext (i due indici sono stati creati separatamente)
questa è la tabella
codice:
id | nome | descrizione
Io vorrei cercare o solo in nome o solo in cognome o in entrambi ordinando però per lo score prima di nome e poi di descrizione.
Ad esempio:
codice:
SELECT nome,descrizione,MATCH (nome) AGAINST('+nokia +n93' IN BOOLEAN MODE) as score FROM tabella WHERE MATCH (nome) AGAINST('+nokia +n93' IN BOOLEAN MODE) ORDER BY score DESC;
La query funziona egregiamente e tempi di esecuzione bassissimi (0,01xxx)
Stessa cosa con
codice:
SELECT nome,descrizione,MATCH (descrizione) AGAINST('+nokia +n93' IN BOOLEAN MODE) as score FROM tabella WHERE MATCH (descrizione) AGAINST('+nokia +n93' IN BOOLEAN MODE) ORDER BY score DESC;
Anche qui la query sopra riportata funziona
--------
codice:
SELECT nome,descrizione,MATCH (nome) AGAINST('+nokia +n93' IN BOOLEAN MODE) as score_nome,MATCH (descrizione) AGAINST('+nokia +n93' IN BOOLEAN MODE) as score_descrizione FROM tabella WHERE MATCH (nome) AGAINST('+nokia +n93' IN BOOLEAN MODE) AND MATCH (nome) AGAINST('+nokia +n93' IN BOOLEAN MODE) ORDER BY score_nome DESC,score_descrizione DESC;
Questa funziona bene in terrmini di velocità ma limita i risultati, perche' i valori devono essere giustamente sia in 'nome' sia in 'descrizione' quindi la scarto e faccio
codice:
SELECT nome,descrizione,MATCH (nome) AGAINST('+nokia +n93' IN BOOLEAN MODE) as score_nome,MATCH (descrizione) AGAINST('+nokia +n93' IN BOOLEAN MODE) as score_descrizione FROM tabella WHERE MATCH (nome) AGAINST('+nokia +n93' IN BOOLEAN MODE) OR MATCH (nome) AGAINST('+nokia +n93' IN BOOLEAN MODE) ORDER BY score_nome DESC,score_descrizione DESC;
Ecco qui l'inghippo, la query impiega anche 15 secondi per eseguirla anche con la query cosi modificata
codice:
SELECT nome,descrizione,MATCH (nome,descrizione) AGAINST('+nokia +n93' IN BOOLEAN MODE) as score FROM tabella WHERE MATCH (nome,descrizione) AGAINST('+nokia +n93' IN BOOLEAN MODE) ORDER BY score DESC;
-----
Ho provato a fare anche un indice che comprendesse sia nome che descrizione ma phpmyadmin mi avverte che nome è già una chiave fulltext (...e descrizione??? )
Non capisco......
PS. Se faccio un indice aggregando nome,descrizione se effettuo l'ultima ricerca funziona alla grande....
Chi mi puo' aiutare?