我曾经与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”。
我不想要一个能解决我问题的代码,我只想知道我应该使用的功能,一些演示代码将不胜感激。
答案 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。
还请注意,它通常会违反直觉。您可能会发现自己在问“为什么这样做?”经常。