即使在Mysql中搜索的字符串不正确,如何使搜索匹配

时间:2018-12-05 11:25:43

标签: mysql sql

我曾经与Postgres合作。使用postgres,我可以通过安装the pg_trgm trigram extension来进行更“智能的搜索”,然后用户可能会错过诸如“ aple”之类的字母,或者将字母错误地定位为“ appel”以使搜索匹配。使用Mysql我不知道要使用哪个功能。我可以给个指示吗?

我的查询是这样的:

   select *,
   case when titulo like '%pneu%' then 1 else 0  end as rank_titulo,
    case when descricao like '%pneu%' then 1 else 0  end as  rank_descricao,
  case when tag like '%pneu%' then 1 else 0 end as rank_tag
   from produto where  titulo like '%pneu%'
   or descricao like '%pneu%' or 
  tag like '%pneu%' order by rank_titulo desc, rank_descricao desc, 
   rank_tag desc   ;

我不在乎用户是否键入搜索匹配的“ pineu”,“ pneo”,“ penu”。

我不想要一个能解决我问题的代码,我只想知道我应该使用的功能,一些演示代码将不胜感激。

1 个答案:

答案 0 :(得分:1)

与postgreSQL的trigram扩展最接近的MySQL功能是FULLTEXT searching

您可以使用此语法。

...WHERE MATCH(titulo, descricao, tag) AGAINST('pneu' IN NATURAL LANGUAGE MODE)...

您需要在表中使用FULLTEXT索引才能使其正常工作。

CREATE FULLTEXT INDEX ft ON produto(titulo, descricao, tag);

请注意以下几点:默认情况下,FULLTEXT仅对三个字母或更多的单词起作用,而自然语言模式在小桌子上却奇怪。您可以更改这些内容。您可能还需要用您的语言(葡萄牙语?)添加stopwords

还请注意,它通常会违反直觉。您可能会发现自己在问“为什么这样做?”经常。