所以我在我的表的一个列中添加了全文索引,我的数据库引擎是 MyIsam,但我仍然遇到这个讨厌的错误:
fatal error :未捕获的异常“mysqli_sql_exception”,消息为“找不到与列列表匹配的全文索引”...我的查询:
$stmt = $db->prepare("SELECT loc, lt, lg FROM locations WHERE MATCH(loc) AGAINST(?) ");
如何解决这个问题,我应该寻找什么?
最佳答案
您应该查找 FULLTEXT 索引的定义。它显然是为多个列定义的,而不仅仅是单个 loc
列。
mysql> SHOW CREATE TABLE locations\G
CREATE TABLE `locations` (
`loc` text,
`name` text,
`summary` text,
FULLTEXT KEY `name` (`name`,`summary`,`loc`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
您在 MATCH()
函数中命名的列必须所有全文索引的列,并且它们的顺序必须相同。
例子:
-- WRONG; only using one of the three columns
SELECT loc, lt, lg FROM locations WHERE MATCH(loc) AGAINST(?)
-- WRONG; using all three columns, but in a different order than the index
SELECT loc, lt, lg FROM locations WHERE MATCH(loc, name, summary) AGAINST(?)
-- RIGHT:
SELECT loc, lt, lg FROM locations WHERE MATCH(name, summary, loc) AGAINST(?)
关于php - Mysql FULL TEXT 索引搜索错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20874392/