我有一位客户询问他们的搜索是否可以搜索公司名称,这些名称可以根据用户输入以多种格式进行搜索,例如数据库中存储的公司是 A J R Kelly Ltd,如果用户搜索“一个 J R Kelly”被发现,使用;
<cfif pctermsCount gt 0>
AND (LOWER(p.name) LIKE '%#pcTerms#%')
</cfif>
如果他们搜索“Kelly”,则会找到该公司,但如果他们搜索“A J Kelly”或“AJ Kelly”等字符串的损坏版本,则不会找到该公司。
我能做些什么来让它变得更宽容一点吗?
Thanks.
如果您使用 MyISAM,则可以使用全文索引。请参阅本教程 http://devzone.zend.com/article/1304
如果您使用不同的存储引擎,您可以使用第三方全文引擎,例如 sphinx,它可以充当mysql的存储引擎 http://sphinxsearch.com/index.html或可以查询的单独服务器。
使用 MySQL 全文索引进行搜索A J Kelly
会匹配AJ Kelly
(不会混淆问题,但 A、J 和 AJ 会被忽略,因为默认情况下它们太短并且会在 Kelly 上匹配。)一般来说,全文更宽容(通常比 LIKE '%string%' 更快),因为允许部分文本然后可以根据相关性对匹配进行排名。
您还可以使用SOUNDEX http://www.madirish.net/node/85通过对单词的语音等效项建立索引并通过在搜索词上应用 SOUNDEX 来搜索它们,然后使用它们来搜索索引来使搜索更加宽容。与声音mary
, marie
, and marry
例如,将全部匹配。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)