我试图从此查询中获得结果
SELECT ID FROM table1 WHERE MATCH(column1, column2) AGAINST ('text')
但我收到此错误#1191 - Can't find FULLTEXT index matching the column list
当我在MATCH中只放置一列时它正在工作,MATCH中的两列或更多列不起作用。我见过有人这样做。
答案 0 :(得分:11)
MATCH()
内部的列必须与先前为FULLTEXT索引定义的列相同。也就是说,索引中的列集必须与调用MATCH()
时的列相同。
因此,要搜索两列,必须在相同的两列上以相同的顺序定义FULLTEXT索引。
以下是可以的:
ALTER TABLE tabl1 ADD FULLTEXT INDEX (column1, column2);
SELECT ID FROM table1 WHERE MATCH(column1, column2) AGAINST ('text')
以下是错误的,因为MATCH()引用了两列,但索引仅为一列定义。
ALTER TABLE tabl1 ADD FULLTEXT INDEX (column1);
SELECT ID FROM table1 WHERE MATCH(column1, column2) AGAINST ('text')
以下是错误的,因为MATCH()引用了两列,但索引是为三列定义的。
ALTER TABLE tabl1 ADD FULLTEXT INDEX (column1, column2, column3);
SELECT ID FROM table1 WHERE MATCH(column1, column2) AGAINST ('text')
以下是错误的,因为MATCH()引用了两列但每个索引都是为一列定义的。
ALTER TABLE tabl1 ADD FULLTEXT INDEX (column1);
ALTER TABLE tabl1 ADD FULLTEXT INDEX (column2);
SELECT ID FROM table1 WHERE MATCH(column1, column2) AGAINST ('text')
以下是错误的,因为MATCH()引用了两列,但顺序错误:
ALTER TABLE tabl1 ADD FULLTEXT INDEX (column1, column2);
SELECT ID FROM table1 WHERE MATCH(column2, column1) AGAINST ('text')
总之,使用MATCH()必须以相同的顺序引用完全相同的列作为一个全文索引定义。