【问题标题】:How to use match against in mysql如何在mysql中使用匹配
【发布时间】:2012-02-03 22:13:52
【问题描述】:
TABLE ITEMS: (id, name)
1| chicken
2| potato

查询:

select * from items where match(name) against('tato');

正在返回一个空集。我是否错过了解 match against 的工作原理?

【问题讨论】:

    标签: mysql sql match


    【解决方案1】:

    尝试使用:

    SELECT * FROM items
    WHERE INSTR(name, 'tato') > 0
    

    SELECT * FROM items
    WHERE name LIKE '%tato'
    

    您使用的语法似乎是正确的;您是否在该字段上启用了全文?

    ALTER TABLE items ADD FULLTEXT(name);
    

    【讨论】:

    • 这不会使用任何索引,并且会进行全表扫描。在任何大桌子上,这种方法都行不通。
    • @KenMazaika:OP 没有谈论“大桌子”……无论如何,你有更好的主意吗?
    【解决方案2】:

    我认为 FULLTEXT 索引不支持部分单词匹配。对于这样的事情,你最好使用 Marco 描述的结构之一。

    【讨论】:

    • 这是正确的,除非您使用特殊运算符来更改 MATCH AGAINST 的行为。 MATCH AGAINST 还可以做一些可能不是你所期望的奇怪的事情。例如,它会忽略任何已定义的停用词和数据库中频繁出现的词。它还会忽略不符合 ft_min_word_len 系统变量的单词,无论设置为什么。由于这些原因,我强烈建议采纳 Marco 的建议并改用 INSTR 或 LIKE(尽管我会使用 LIKE '%tato%' 以防万一您希望 tato 出现在字符串中的任何位置,而不仅仅是在末尾)。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2016-11-24
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    相关资源
    最近更新 更多