我有一个客户问他们是否进行搜索,即搜索可以根据用户输入以多种格式搜索的公司名称,例如存储在数据库中的公司为AJR Kelly Ltd,例如,如果用户搜索“AJR Kelly”被发现,使用;
<cfif pctermsCount gt 0>
AND (LOWER(p.name) LIKE '%#pcTerms#%')
</cfif>
如果他们搜索“Kelly”,则会找到公司,但是如果他们搜索字符串的损坏版本,例如“A J Kelly”或“AJ Kelly”,则找不到该公司。
我能做些什么让它变得更宽容吗?
谢谢。
最佳答案
如果您使用的是MyISAM,则可以使用全文本索引。 See this tutorial
如果使用其他存储引擎,则可以使用第三方全文本引擎(例如sphinx),该引擎可以充当storage engine for mysql或可以查询的单独服务器。
使用MySQL全文索引时,对A J Kelly
的搜索将与AJ Kelly
匹配(不会混淆问题,但是A,J和AJ会被忽略,因为它们默认值太短,并且会在Kelly上匹配。)通常,全文本要宽容得多(通常是宽容的)。比LIKE'%string%'更快),因为它允许部分匹配,然后可以根据相关性对其进行排名。
您还可以使用SOUNDEX索引单词的语音等效词,并通过在搜索词上应用SOUNDEX来搜索它们,然后使用这些词来搜索索引,从而使搜索更加宽容。例如,使用soundex的mary
,marie
和marry
都将匹配。