Mysql
 sql >> Database >  >> RDS >> Mysql

Più colonne in MATCH AGAINST

Le colonne denominate all'interno di MATCH() devono essere le stesse colonne definite in precedenza per un indice FULLTEXT. Cioè, l'insieme di colonne deve essere lo stesso nel tuo indice come nella tua chiamata a MATCH() .

Quindi, per cercare due colonne, devi definire un indice FULLTEXT sulle stesse due colonne, nello stesso ordine.

Va bene quanto segue:

ALTER TABLE tabl1 ADD FULLTEXT INDEX (column1, column2);

SELECT ID FROM table1 WHERE MATCH(column1, column2) AGAINST ('text')

Quanto segue è errato perché MATCH() fa riferimento a due colonne ma l'indice è definito per una sola colonna.

ALTER TABLE tabl1 ADD FULLTEXT INDEX (column1);

SELECT ID FROM table1 WHERE MATCH(column1, column2) AGAINST ('text')

Quanto segue è errato perché MATCH() fa riferimento a due colonne ma l'indice è definito per tre colonne.

ALTER TABLE tabl1 ADD FULLTEXT INDEX (column1, column2, column3);

SELECT ID FROM table1 WHERE MATCH(column1, column2) AGAINST ('text')

Quanto segue è sbagliato perché MATCH() fa riferimento a due colonne ma ogni indice è definito per una colonna.

ALTER TABLE tabl1 ADD FULLTEXT INDEX (column1);
ALTER TABLE tabl1 ADD FULLTEXT INDEX (column2);

SELECT ID FROM table1 WHERE MATCH(column1, column2) AGAINST ('text')

Quanto segue è sbagliato perché MATCH() fa riferimento a due colonne ma nell'ordine sbagliato:

ALTER TABLE tabl1 ADD FULLTEXT INDEX (column1, column2);

SELECT ID FROM table1 WHERE MATCH(column2, column1) AGAINST ('text')

In sintesi, l'uso di MATCH() deve fare riferimento esattamente alle stesse colonne, nello stesso ordine, di una definizione di indice fulltext.