我正在编写一些代码来自动标记一些文章。
我有一系列标签和一个文章表。我运行以下查询来检查与标记匹配的标题:
SELECT headline
FROM `news`
WHERE MATCH(headline) AGAINST ("+Green +Day" IN BOOLEAN MODE)
这会在标题中找到所有带有“绿色日”字样的文章 - 没有第一个+,我会收到只包含“绿色”字样的文章。
这并不完美,有些标签会导致结果不准确 - 例如,一个名为Die! Die! Die!
的标签(不要问)会在每个标题中返回“die”字样。
我有什么明显的遗失吗?我想要的只是按照输入的确切方式获得包含整个短语的标题。
答案 0 :(得分:3)
据我所知docs,使用引号应该足够了。从文档页面上的示例:
“有些话”
查找包含完整短语“some words”的行(例如,包含“某些智慧词”但不包含“某些噪音词”的行)。请注意,包含该短语的“”“字符是分隔短语的运算符字符。它们不是包含搜索字符串本身的引号。
答案 1 :(得分:2)
你必须在双引号附近加上额外的单引号,这意味着确切的单词查询。 +
运算符仅表示AND
逻辑。
SELECT headline
FROM `news`
WHERE MATCH(headline) AGAINST ('"+Green +Day"' IN BOOLEAN MODE)
答案 2 :(得分:1)
@Matt - 使用Mitch代码匹配“Terror”的原因是因为你没有在第一个%字符后留空间。 精确搜索单个单词的正确语法如下所示
SELECT headline FROM news WHERE headline LIKE '% Green Day %'
这将管理您检索以完全相同的方式输入的搜索词的请求。
答案 3 :(得分:0)
如果您想匹配整个短语,那么您应该执行以下操作:
SELECT headline FROM news WHERE headline LIKE '%Green Day%'
将在标题中以“绿色日”字样返回结果。