如何使搜索匹配,即使在mysql中搜索的字符串不完全相同

k3bvogb1  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(243)

我习惯于和博士后一起工作。有了postgres,我可以通过安装pg\u trgm trigram扩展来进行更“智能化的搜索”,然后用户可能会错过像“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”搜索应该匹配。
我不想一个工作的代码来解决我的问题,我只想知道我应该使用的功能,一些演示代码将不胜感激。

mspsb9vt

mspsb9vt1#

与postgresql的trigram扩展最接近的mysql特性是全文搜索。
你可以用这个语法。

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

您的表中需要一个全文索引才能使此工作正常。

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

请注意以下几点:默认情况下,全文只适用于三个字母或更多的单词,而自然语言模式在小表格上的效果则很奇怪。你可以改变这些。您可能还需要在您的语言(葡萄牙语?)中添加stopwords。
还要注意的是,它通常是反直觉的。你可能会经常问自己“为什么会这样?”。

相关问题