MySQL:在全文搜索中查找多个单词-仅精确匹配
我正在写一些代码来自动标记一些文章 我有一个标签数组和一个文章表。我运行以下查询以检查与标记匹配的标题:MySQL:在全文搜索中查找多个单词-仅精确匹配,sql,mysql,full-text-search,Sql,Mysql,Full Text Search,我正在写一些代码来自动标记一些文章 我有一个标签数组和一个文章表。我运行以下查询以检查与标记匹配的标题: SELECT headline FROM `news` WHERE MATCH(headline) AGAINST ("+Green +Day" IN BOOLEAN MODE) 这会发现所有的文章标题中都有“绿色日”这个词——如果没有第一个+,我会得到只包含“绿色”一词的文章 这并不完美,有些标签会导致不准确的结果-例如一个名为Die的标签!死亡死(不问)返回每个标题,其中包含
SELECT headline
FROM `news`
WHERE MATCH(headline) AGAINST ("+Green +Day" IN BOOLEAN MODE)
这会发现所有的文章标题中都有“绿色日”这个词——如果没有第一个+,我会得到只包含“绿色”一词的文章
这并不完美,有些标签会导致不准确的结果-例如一个名为Die的标签!死亡死代码>(不问)返回每个标题,其中包含“死亡”一词
这里有什么明显的我遗漏的吗?我只想得到包含整个短语的标题,按照输入的确切方式。如果您想匹配整个短语,那么您应该执行以下操作:
从标题为“%Green Day%”的新闻中选择标题
这将返回标题中带有短语“绿色日”的结果。据我在中看到的,使用引号应该足够了。从文档页面上的示例中:
“一些词”
查找包含确切短语“some words”的行(例如,包含“some words of willigence”但不包含“some noise words”的行)。请注意,包含短语的“”字符是分隔短语的运算符字符。它们不是包含搜索字符串本身的引号
@马特-使用米奇的代码匹配“恐怖”的原因是因为在第一个%字符后没有留下空格。
精确搜索单个单词的正确语法如下所示
SELECT headline FROM news WHERE headline LIKE '% Green Day %'
这将管理您检索以完全相同的方式输入的搜索词的请求。您必须在双引号周围加上额外的单引号,这意味着精确的词查询。+
运算符只意味着和
逻辑
SELECT headline
FROM `news`
WHERE MATCH(headline) AGAINST ('"+Green +Day"' IN BOOLEAN MODE)
不,先试试这个。对“绿日”很好,但如果我有一个像“错误”这样的标签,它也会和标题中的“恐怖”一词相匹配。@Matt-那么你应该尝试使用正则表达式搜索并设置单词边界……或者使用全文索引:)@Pekka-哈,我的错。我不敢相信我没有想到用引号括起来。