FULLTEXT搜索问题

时间:2012-01-17 05:32:54

标签: mysql search full-text-search fulltext-index

我以前创建了一个搜索,但它运行正常,但尝试在另一个表中执行此操作时遇到了一些问题。

我收到了错误......

SQL查询失败。检查您的查询。

返回错误:找不到与列列表匹配的FULLTEXT索引

我(据我所知)成功将列转换为全文,数据库设置为...

这是我的SQL信息......

CREATE TABLE `users` (
  `auto` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` varchar(6) DEFAULT NULL,
  `username` varchar(15) DEFAULT NULL,
  `first_name` varchar(20) NOT NULL DEFAULT '',
  `last_name` varchar(20) NOT NULL DEFAULT '',
  `email` varchar(30) NOT NULL DEFAULT '',
  `password` varchar(128) NOT NULL DEFAULT '',
  `ranking` varchar(128) DEFAULT '1',
  `sex` varchar(128) NOT NULL DEFAULT '',
  `active` varchar(128) NOT NULL DEFAULT '0',
  `ppic` varchar(128) NOT NULL DEFAULT 'ppic.jpg',
  `time_zone` varchar(128) DEFAULT 'America/Los_Angeles',
  `adult_filter` varchar(128) DEFAULT '0',
  PRIMARY KEY (`auto`),
  FULLTEXT KEY `user_id` (`user_id`,`username`,`first_name`,`last_name`,`email`,`password`,`sex`,`active`,`ppic`,`time_zone`,`adult_filter`),
  FULLTEXT KEY `user_id_2` (`user_id`,`username`,`first_name`,`last_name`),
  FULLTEXT KEY `ft_index_name2` (`user_id`,`username`,`first_name`,`last_name`),
  FULLTEXT KEY `ft_index_name32` (`user_id`,`username`,`first_name`,`last_name`,`email`,`password`,`ranking`,`sex`,`active`,`ppic`,`time_zone`,`adult_filter`),
  FULLTEXT KEY `ft_index_name322` (`user_id`),
  FULLTEXT KEY `ft_index_name3223` (`first_name`),
  FULLTEXT KEY `ft_index_name32233` (`last_name`),
  FULLTEXT KEY `ft_index_name322433` (`username`),
  FULLTEXT KEY `ft_index_name3232433` (`username`)
) ENGINE=MyISAM AUTO_INCREMENT=40 DEFAULT CHARSET=utf8

如果您没有注意到这一点,我不知道我正在使用全文密钥,这可能是问题。然而,我第一次做了类似的事情,它运作得很好。

这是我的搜索查询...

SELECT user_id, username, first_name, last_name,
 MATCH(username, first_name, last_name) AGAINST('" . $search . "') AS score
 FROM users
 WHERE MATCH(username, first_name, last_name) AGAINST('" . $search . "')
 ORDER BY username

有谁知道可能导致此问题的原因?我已经在这几天了,无法弄清楚问题。感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

您需要一个FULLTEXT键,如下所示:

FULLTEXT KEY `ft_index_thisoneiscorrect` (username, first_name, last_name)

(请注意,匹配列的列表与您在查询中匹配的列的列表相同。)

摆脱所有其他的。他们中的大多数都没用,有些是完全危险的。