已经有人写过很多次了,Opencart的基本搜索还不够好。好吧,我遇到过这个问题:
当客户在我的国家(斯洛伐克(UTF8))搜索产品时,他可能不会使用变音符号。所以他/她写下"cucoriedka“却一无所获。
但是,在数据库中有名为"čučoriedka“的产品,我希望它也能显示出来,因为这就是他要找的。
你知道怎么做这件事吗?越简单越好!
发布于 2015-08-24 07:01:56
我对斯洛伐克语一无所知,很抱歉。但是,斯洛伐克校对utf8_slovak_ci将斯洛伐克字母č视为与c不同。(在电话簿中,以C开头的姓氏是否都在以C开头的姓氏之后?)他们很可能会这么做。MySQL的创建者当然认为他们是这样做的。)
排序规则utf8_general_ci对č和c的处理方式相同。这里有一个sql小提琴演示了这一切。http://sqlfiddle.com/#!9/46c0e/1/0
如果将包含产品名称的列的排序规则更改为utf8_general_ci,则会得到一个更便于搜索的表。假设您的表名为product,其中包含名称的列名为product_name。然后,这条SQL数据定义语句将按照您的要求转换列。您应该查找列的实际数据类型,而不是像我在本例中那样使用varchar(nnn)。
alter table product modify product_name varchar(nnn) collate utf8_general_ci如果不能修改这个表,那么可以像这样修改WHERE子句,显式地指定排序规则。
WHERE 'userInput' COLLATE utf8_general_ci = product_name但这将比更改列排序规则的搜索速度更慢。
发布于 2015-08-24 06:06:02
您可以使用MySQL的SOUNDEX()或SOUNDS LIKE函数。
这些函数比较语音。
除了英语之外,soundex的准确性是值得怀疑的。但是,如果我们像这样使用它,它可以得到改进
select soundex('ball')=soundex('boll') from dual也可以使用SOUNDS LIKE。
结合使用SOUNDEX()和SOUNDS LIKE将提高准确率。
有关详细信息或mysql-sounds-like-and-soundex,请参阅MySQL文档
https://stackoverflow.com/questions/14740131
复制相似问题