我习惯于和博士后一起工作。有了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”搜索应该匹配。
我不想一个工作的代码来解决我的问题,我只想知道我应该使用的功能,一些演示代码将不胜感激。
1条答案
按热度按时间mspsb9vt1#
与postgresql的trigram扩展最接近的mysql特性是全文搜索。
你可以用这个语法。
您的表中需要一个全文索引才能使此工作正常。
请注意以下几点:默认情况下,全文只适用于三个字母或更多的单词,而自然语言模式在小表格上的效果则很奇怪。你可以改变这些。您可能还需要在您的语言(葡萄牙语?)中添加stopwords。
还要注意的是,它通常是反直觉的。你可能会经常问自己“为什么会这样?”。