MATCH AGAINST中的多列

Dar*_*viæ 2 mysql full-text-search

我正在尝试从此查询中获取结果

SELECT ID FROM table1 WHERE MATCH(column1, column2) AGAINST ('text')
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个错误 #1191 - Can't find FULLTEXT index matching the column list

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

Bil*_*win 12

名为inside的列MATCH()必须与先前为FULLTEXT索引定义的列相同.也就是说,索引中的列集必须与调用时的列相同MATCH().

因此,要搜索两列,必须以相同的顺序在相同的两列上定义FULLTEXT索引.


以下是可以的:

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

SELECT ID FROM table1 WHERE MATCH(column1, column2) AGAINST ('text')
Run Code Online (Sandbox Code Playgroud)

以下是错误的,因为MATCH()引用了两列,但索引仅为一列定义.

ALTER TABLE tabl1 ADD FULLTEXT INDEX (column1);

SELECT ID FROM table1 WHERE MATCH(column1, column2) AGAINST ('text')
Run Code Online (Sandbox Code Playgroud)

以下是错误的,因为MATCH()引用了两列,但索引是为三列定义的.

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

SELECT ID FROM table1 WHERE MATCH(column1, column2) AGAINST ('text')
Run Code Online (Sandbox Code Playgroud)

以下是错误的,因为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')
Run Code Online (Sandbox Code Playgroud)

以下是错误的,因为MATCH()引用了两列,但顺序错误:

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

SELECT ID FROM table1 WHERE MATCH(column2, column1) AGAINST ('text')
Run Code Online (Sandbox Code Playgroud)

总之,使用MATCH()必须以相同的顺序引用与一个全文索引定义完全相同的列.