MySQL中的单个或多个单词搜索

时间:2016-06-17 11:48:05

标签: php mysql

我有桌子

 CREATE TABLE IF NOT EXISTS `posts` (
      `post_id` int(11) NOT NULL,
      `post_slug` text CHARACTER SET utf8 NOT NULL,
      `title` longtext CHARACTER SET utf8 NOT NULL,
      `created_at` date NOT NULL,
      `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
  ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;

我正在这个桌子上实施搜索。例如我有很多帖子 我正在搜索Keyword" Art"当我搜索"艺术"它很好。我很好 让所有艺术品都有艺术品,但是当我寻找艺术品#34;我没有得到任何记录 因为没有帖子包含" arts"在他们的标题中。关键字不是固定的。用户将搜索的用户关键字 我试过的是查询:

SELECT * 
FROM `posts` 
WHERE title LIKE "%art%" 
ORDER BY `post_id` ASC

3 个答案:

答案 0 :(得分:1)

您可以使用布尔运算符切换到全文。

将您的查询更改为:

SELECT * 
FROM `posts` 
WHERE('art*' IN BOOLEAN MODE)
ORDER BY `post_id` ASC

答案 1 :(得分:0)

这个问题可能并不像看起来那么简单。对于“艺术”来说,获得单一的“艺术”确实很容易,但对于其他词(例如“带有复数'查询'的'查询'),将需要更多的逻辑。

除了实际标题之外,一种可能的方法是在标题中存储word stems个单词。然后,您可以确定搜索查询中单词的词干只搜索那些词干。

这具有额外的好处,您不仅可以找到独立于其单数/复数形式的单词,而且例如还有不同时态的动词(“工作”与“作品”)。

例如,您可以查看this PHP word stemming library

答案 2 :(得分:0)

我是一个类似MySQL的新手,但我认为这样的事情应该有效。

SELECT * FROM `posts` WHERE title REGEXP 'art(s?)'