我想制作一个基于“听起来像”匹配的搜索功能。
例如,假设我有一个看起来像这样的公司列表(假设我们也住在Bizzaro世界):
(或者与名字相似的东西...... George
或Jeorge
?“Yah-way”,或“ye-hova”?)
当有人搜索“听起来像”soundex("site") == S230
的内容时,他们也会看到“视线”的结果。
由于大多数使用过soudnex的人已经知道,正常的子串匹配显然不会这样做。
我正在尝试在脑海中解决如何基于此创建一个可以匹配的WHERE子句,所以我想运行soundex而不是典型的WHERE company LIKE input
。显然,如果我在整个公司名称上运行soundex,我将无法进行子字符串搜索(例如,搜索“ALL”的用户永远不会匹配“All ready”的soundex)。 Soundex在每个单词上的分割也许不值得,所以我不确定运行soundex的所有组合是个好主意......或者即使在具有超过1000条记录的数据库中计算可行也是如此。
基本上我想要的互动是(在办公室或其他什么地方)汤姆对莎莉说“这个名字就像 Rebekkah Schwartzkopff ”,可以用语音搜索模糊匹配。
显然,由于soudnex,我们会遇到非英语公司的问题,但我会在这个问题上妥协。
我想在不向数据库或存储过程添加任何内容的情况下执行此操作。
答案 0 :(得分:2)
如果SOUNDEX是你正在做的事情的良好开端,你可以使用DIFFERENCE。
例如:
SELECT *
FROM Person
WHERE DIFFERENCE(Person.FirstName, 'George') >= 3
请注意,DIFFERENCE函数使用值0-4返回两个字符串的SOUNDEX值之间的差异; 4意味着字符串非常接近相同,0表示它们完全不同(对我来说是向后缩放的类型,但我认为它有效)。
答案 1 :(得分:1)
非常有趣的问题。我做了一点戳,发现了这个:
http://www.codeproject.com/KB/database/dmetaphone4.aspx
我自己没有测试过,但似乎值得一试。
它需要您向数据库添加内容,但我不知道如何使用内置的SQL Server功能实现所需的功能......