[PHP] Query fulltext

  • Creatore Discussione Creatore Discussione filomeni
  • Data di inizio Data di inizio

filomeni

Moderatore
Membro dello Staff
MOD
14 Mag 2006
1.054
6
38
53
Roseto degli Abruzzi (TE)
www.sitiweb.cloud
Ciao, il problema con la seguente query:
PHP:
$sql="SELECT * , MATCH(desc_att, tag) AGAINST('$var1, $var2') AS attinenza FROM esercizi_com WHERE MATCH(desc_att, tag) AGAINST('$var1, $var2') ORDER BY attinenza DESC";
mi restituisce errore : Can't find FULLTEXT index matching the column list
Che chiaramente mi dice di inserire gli indici fulltext, ma questi sono presenti nelle colonne "desc_att e tag", una prova inconfutabile è che ho provato singolarmente le colonne prima ad inserire solo "desc_att" e poi "tag".
In tutte e due le prove mi restituisce i risultati di ricerca! Non capisco perchè inserendo entrambi le colonne mi da errore!
Grazie
 
Ciao, il problema con la seguente query:
PHP:
$sql="SELECT * , MATCH(desc_att, tag) AGAINST('$var1, $var2') AS attinenza FROM esercizi_com WHERE MATCH(desc_att, tag) AGAINST('$var1, $var2') ORDER BY attinenza DESC";
mi restituisce errore : Can't find FULLTEXT index matching the column list
Che chiaramente mi dice di inserire gli indici fulltext, ma questi sono presenti nelle colonne "desc_att e tag", una prova inconfutabile è che ho provato singolarmente le colonne prima ad inserire solo "desc_att" e poi "tag".
In tutte e due le prove mi restituisce i risultati di ricerca! Non capisco perchè inserendo entrambi le colonne mi da errore!
Grazie
ma questi sono presenti nelle colonne "desc_att e tag"
Si nel post l'ho detto... Gli indici FULLTEXT ci sono in entrambi i campi
 
non ho capito se hai due indici o l'indice composto, ma forse sono io parco di parole,

vuole l'indice composto dalle due colonne e nello stesso ordine con cui li elenchi nel match,
non bastano i due indici separati
se ricordo il comando,
alter table xyz add FULLTEXT(desc_att, tag)

il messaggio mi sembra chiaro
Can't find FULLTEXT index matching the column list
non trova l'indice che corrisponde alla lista delle colonne
 
ciao
per tagliare "la testa al toro" basterebbe che filomeni postasse come ha fatto il create table, dovrebbe essere quelacosa di simile, da li penso che si possa capire dov'è l'inghippo
Codice:
id INT(9) UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
desc_att VARCHAR(100),
tag TEXT,
FULLTEXT (desc_att,tag)

ho messo le lunghezze a caso
 
I campi FULLTEXT li ho creati con phpMyAdmin e non da codice. Comunque i citati "desc_att" e "tag" le proprietà sono entrambi text e ad entrambi assegnati gli indici FULLTEXT.
Codice:
id INT(11) UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
desc_att TEXT,
tag TEXT,
FULLTEXT (desc_att,tag)
inserisco screenshot di phpMyAdmin
campi.JPG
fulltext.JPG
 
il messaggio mi sembra chiaro
Can't find FULLTEXT index matching the column list
non trova l'indice che corrisponde alla lista delle colonne
Si @marino, il messaggio è chiarissimo... ma appunto, siccome i campi sono FULLTEXT, non riesco a capire il perchè e testandoli singolarmente (desc_att e tag) funziona senza restituire errore...
 
sarà che capisco poco di mysql, ma dalla lista degli indici,
a me sembra di vedere due indici distinti, non un indice combinazione di due colonne
 
ciao
non ho mai avuto occasione di usare il fultext quindi può essere che dica una ca..ata, ma leggendo (maledetto inglese)
https://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html#function_matc
https://dev.mysql.com/doc/refman/5.7/en/fulltext-natural-language.html
sembrerebbe che l'inghippo sia qui
MATCH (col1,col2,...) AGAINST (expr [search_modifier])
cioè in match puoi mettere colonne a piacere, in againts una sola espressione e se non ho capito male tu ne metti due AGAINST('$var1, $var2')
se ca..ata scusa
 
Dunque Borgo, prova a leggere l'articolo riportato qui: https://www.mrw.it/mysql/ricerche-full-text-mysql_7074_4.html, in AGAINST vanno i termini di ricerca e il problema non si presenta qui... ma su: MATCH (col1,col2,...), col1 e col2 devono avere entrambi indice FULTEXT e qui se metto una colonna alla volta la query funziona ma se (come da manuale) le metto tutte e due mi da errore "Can't find FULLTEXT index matching the column list" che appunto significa che non trova l'indice FULTEXT nelle colonne. Ma in realtà le colonne l'indice FULTEXT lo hanno!
 
ciao
ho visto, ma se noti mi sembra che confermi quello che sto dicendo in
AGAINST c'è una sola espressione AGAINST ('tortor') e non due come metti tu
 
beh, a sto punto ho provato a seguire il tuo consiglio quindi su AGAINS ho messo solo una occorrenza quindi la query è diventata la seguente:
PHP:
 $sql="SELECT * , MATCH(desc_att, tag) AGAINST('$var1') AS attinenza FROM esercizi_com WHERE MATCH(desc_att, tag) AGAINST('$var1') ORDER BY attinenza DESC";
e anche in questo caso, mi restituisce lo stesso errore! Sembrerebbe che MATCH non vuole "sentire" le due colonne! Boh! E pure la query è da manuale...
Se la query la eseguo così funziona:
PHP:
 $sql="SELECT * , MATCH(desc_att) AGAINST('$var1') AS attinenza FROM esercizi_com WHERE MATCH(desc_att) AGAINST('$var1') ORDER BY attinenza DESC";
e anche così:
PHP:
 $sql="SELECT * , MATCH(tag) AGAINST('$var1') AS attinenza FROM esercizi_com WHERE MATCH( tag) AGAINST('$var1') ORDER BY attinenza DESC";
invece con entambe le colonne ERRORE...
 

Discussioni simili