这可能是一个新手问题,因为我不是SQL的专家。但是,无法使用Google找到答案。 我有一个名为 record_fields 的表,其中包含我要搜索的系统内容的大部分内容。 content 单元格被定义为LONGTEXT,因为它可以包括极长的输入。
最初,我使用(为了清晰起见,简化了查询):
SELECT * FROM record_fields WHERE LOWER(content) LIKE LOWER('%{$keyword}%')
执行时间除外,此查询有一个主要问题。如果我搜索术语" post"它将返回所有内容,其中包含" poster","发布"和别的。我想添加一个FULLTEXT搜索。
现在查询看起来像这样(再次,简化):
SELECT * FROM record_fields WHERE MATCH (content) AGAINST ('{$keyword}')
但是,这仍然存在问题。使用MATCH,如果我的系统的用户搜索单词" Bank of America",例如,所有记录都有" Bank"和"美国"将被退回。
TL; DR - 我的问题是:
如何使用MATCH搜索包含空格的精确短语?
任何帮助都将受到高度赞赏,提前谢谢!
答案 0 :(得分:0)
%{keyword}%匹配字符串中任何位置包含关键字的所有文本子字符串。 MATCH通常将匹配字符串中的所有关键字作为单独的搜索词,并与每个匹配。您可以使用布尔模式并在每个必需关键字前使用+符号。看看MySQL reference for this。
编辑答案以反映Idan的回复,但没有从建议的%关键字解决方案中获得结果。
答案 1 :(得分:0)
你可以使用Match With With Boolean Mode,你可以将输入字符串放在'“{$ keyword}”'。
查看以下链接中的最后一个示例
https://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html
SELECT * FROM record_fields WHERE MATCH (content) AGAINST ('"{$keyword}"' IN BOOLEAN MODE )