MATCH AGAINST中的多列

时间:2014-10-28 17:03:38

标签: mysql full-text-search

我试图从此查询中获得结果

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

但我收到此错误#1191 - Can't find FULLTEXT index matching the column list

当我在MATCH中只放置一列时它正在工作,MATCH中的两列或更多列不起作用。我见过有人这样做。

1 个答案:

答案 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()必须以相同的顺序引用完全相同的列作为一个全文索引定义。