我有桌子
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
答案 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?)'