MATCH ...... LIKE什么都不返回

时间:2014-03-25 21:46:26

标签: mysql myisam

我正在尝试在CodeIgniter中创建自己的博客 博客的一个关键功能是,您可以使用某些关键字搜索帖子。 必须在标题,内容,类别和/或关键字中找到这些关键字。

我还在处理我的数据库(例如将类别和关键字提取到单独的表格中),但这是我到目前为止所做的

CREATE TABLE IF NOT EXISTS `posts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `content` varchar(10000) NOT NULL,
  `date` date NOT NULL,
  `keywords` varchar(255) NOT NULL,
  `category` varchar(100) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `titel` (`title`),
  FULLTEXT KEY `title` (`title`),
  FULLTEXT KEY `content` (`content`),
  FULLTEXT KEY `keywords` (`keywords`),
  FULLTEXT KEY `category` (`category`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

我不确定内容列,可能应使用text代替varchar(10000)

在我的表格中,我有2个帖子

ID | TITLE                        | CONTENT          | DATA       | KEYWORDS       | CATEGORY
---+------------------------------+------------------+------------+----------------+----------------------
 1 | Welcome to my website        | A few paragraphs | 2014-02-09 | Welcome        | Site
 2 | All Windows Keyboard layouts | A few paragraphs | 2014-03-11 | A few keywords | Windows Deployment

我的查询如下,我试着保持现在尽可能简单

SELECT * 
    FROM `posts`
    WHERE MATCH(`title`) AGAINST('Welcome');

我似乎无法弄清楚为什么phpMyAdmin不返回任何东西。

我还尝试了一个更复杂的查询,看它是否返回任何内容,没有任何运气

SELECT *, MATCH(`title`) AGAINST('Welcome') AS Relevance
    FROM `posts`
    WHERE MATCH(`title`) AGAINST('Welcome')
    ORDER BY `Relevance` DESC

如果我理解正确,MATCH x AGAINST y可以包含多个关键字 这就是我在寻找的东西。我希望能够在查询中添加几个关键字,并找到在标题,内容,关键字和类别中得分最高的帖子

3 个答案:

答案 0 :(得分:1)

显然欢迎'在MySQL的default stopword list中。

您可以搜索其他内容以进行测试,如果您认为它不适用于您的情况,则可以更改禁用词列表。

另外,请查看this question

答案 1 :(得分:0)

这就是你想要的:

SELECT *, MATCH(`title`) AGAINST('website' IN BOOLEAN MODE) AS Relevance
FROM `posts`
WHERE `title` LIKE '%website%'
ORDER BY `Relevance` DESC

答案 2 :(得分:-2)

试试这个:

 SELECT *
 FROM `posts`
 WHERE MATCH(`title`) AGAINST('website' IN BOOLEAN MODE);

DEMO HERE

欢迎看起来像是mysql中的一个停用词,你必须使用LIKE语句。

  SELECT *
  FROM `posts`
  WHERE MATCH(`title`) AGAINST('website' IN BOOLEAN MODE)
  OR    title LIKE '%Welcome%'