MySQL:在全文搜索中查找多个单词 - 仅限完全匹配

时间:2010-08-29 21:06:56

标签: sql mysql full-text-search

我正在编写一些代码来自动标记一些文章。

我有一系列标签和一个文章表。我运行以下查询来检查与标记匹配的标题:

SELECT headline 
  FROM `news` 
 WHERE MATCH(headline) AGAINST ("+Green +Day" IN BOOLEAN MODE)

这会在标题中找到所有带有“绿色日”字样的文章 - 没有第一个+,我会收到只包含“绿色”字样的文章。

这并不完美,有些标签会导致结果不准确 - 例如,一个名为Die! Die! Die!的标签(不要问)会在每个标题中返回“die”字样。

我有什么明显的遗失吗?我想要的只是按照输入的确切方式获得包含整个短语的标题。

4 个答案:

答案 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%'

将在标题中以“绿色日”字样返回结果。