我有一个客户问他们是否进行搜索,即搜索可以根据用户输入以多种格式搜索的公司名称,例如存储在数据库中的公司为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的marymariemarry都将匹配。

09-30 16:18