【问题标题】:mysql full-text searchmysql全文搜索
【发布时间】:2013-04-04 14:01:07
【问题描述】:

mysql 查询出现问题。我使用全文搜索。

我尝试在我的照片表中找到完全匹配的内容,但出现了问题。

假设我有一个照片描述,比如“Reodor Hansen 遇到 mysql 问题”

如果我随后搜索名为 Reodor Mysql 的用户,则可以看到标记 Reodor Hansen 的图片。

是否有获得完全匹配的选项?我现在谈论 ' ' 和 " " 之类的引号,但它们在这里对我没有帮助。

问题是我不会在搜索 Reodor Mysql 时看到 Reodor Hansens 照片。

这是我使用的查询

SELECT * FROM _photos WHERE MATCH (description) AGAINST ('Reodor Mysql' IN BOOLEAN MODE)

进一步。知道如何更进一步吗?所以我在搜索框中可以写

“Reodor Mysql 的所有图片”或“显示最近 10 张 Reodor Mysql 上传的图片”

搜索对此有响应吗?

【问题讨论】:

标签: mysql mysqli


【解决方案1】:

如果你想找到一个准确的短语,你可以使用双引号。就这样

SELECT * FROM _photos WHERE MATCH (description) 
                  AGAINST ( '"Reodor Mysql"' IN BOOLEAN MODE);

如果您只想要最后 10 张图片,可以在查询中添加 LIMIT。像这样的

SELECT * FROM _photos WHERE MATCH (description) 
                  AGAINST ( '"Reodor Mysql"' IN BOOLEAN MODE) 
                  ORDER BY uploaded_date DESC 
                  LIMIT 10;

【讨论】:

  • 谢谢。有效。关于如何解决我的其他问题的任何想法?我如何要求查看一位用户最后 X 张照片或一位用户最后一次度假的地点
  • 我不知道如何回答您的第二个问题,因为我不知道您的架构和数据如何。要回答这个问题,我需要更多信息,例如:您将上传日期存储在哪里?您将用户假期存储在哪里?全文只是一个 MySQL 索引,可让您对文本列执行更快的查询。
【解决方案2】:

如果您想要精确匹配 Reodor Mysql,则必须使用 LIKE operator

SELECT * FROM _photos WHERE description LIKE '%Reodor Mysql%'

【讨论】:

    猜你喜欢
    • 2010-10-22
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2016-08-24
    • 2021-01-28
    • 2012-01-16
    相关资源
    最近更新 更多