MS SQL Server 的简化语音搜索
使用 Soundex 在 MS SQL Server 上执行语音搜索。
引言
我最近发现了 SQL Server 的语音搜索功能,并在这里实现了一个示例。
背景
关于 Soundex 的一个非常有趣的事情是,匹配算法在 1917 年获得了专利,我认为甚至早于电子计算器的发明,或者接近于灯泡的发明。请查看 http://www.creativyst.com/Doc/Articles/SoundEx1/SoundEx1.htm。
使用代码
存储过程接受表名、逗号分隔的列列表作为结果列表、要搜索的列名作为 MatchColumn
、要搜索的搜索字符串以及在未找到完全匹配项时建议的最大数量。
存储过程检查作为参数传递的表中是否存在匹配记录,并充当
- 找到完全匹配项 - 以提供的列列表形式返回包含所有匹配记录的结果集。
- 未找到匹配项 - 执行语音搜索并返回两个额外的结果集:第一个是完全匹配项(无记录),第二个是使用语音搜索的匹配记录,第三个是最大指定的建议以及列名“Similarity”,规则是 - 相似度值越高,结果与搜索关键字越接近。
我尝试在 Northwind 数据库上搜索“AANA”,得到了“Ana Trujillo”和“Ann Devon”,非常接近。
用法
以下是使用存储过程的方法
Exec PhonicSearch 'Customers', 'customerid, CompanyName,
ContactName, ContactTitle'<script></script> , 'ContactName', 'AANA',5
以下是存储过程的代码
CREATE PROCEDURE PhonicSearch
@TableName varchar (80) -- table name
, @ColumnList varchar(800) -- list of comma seperated column list to return
, @MatchColumn varchar(80) -- compare column with
, @SearchFor varchar(150) -- search string to compare with @MatchColumn
, @MaxSuggest varchar(3) -- in case no exact match found the maximum number
-- of suggested value in @MatchColumn column<script></script>
AS
Declare @strSQL varchar(1500)
-- Build and execute SQL query to find exact match
Set @strSQL = 'SELECT ' + @ColumnList + ' FROM ' + @TableName +
' WHERE ' + @MatchColumn + ' = ''' + @SearchFor + ''''
--Print @strSQL
exec (@strSQL)
-- If no exact match found build query with phonic search
IF @@ROWCOUNT<script></script> =0
Begin
-- Phonic Search query
Set @strSQL = 'SELECT ' + @ColumnList + ' FROM ' + @TableName +
' WHERE SOUNDEX(' + @MatchColumn +
') = SOUNDEX(''' + @SearchFor + ''')'
exec(@strSQL)
--print @strSQL
-- Suggetested words for refin search
Set @strSQL = 'SELECT TOP ' + @MaxSuggest + ' ' + @MatchColumn + ', DIFFERENCE('+
@MatchColumn+ ', '''<script></script> + @SearchFor +
''') as Similarity FROM ' + @TableName + ' WHERE SOUNDEX(' +
@MatchColumn + ') = SOUNDEX(''' + @SearchFor +
''') ORDER BY Similarity'
exec(@strSQL)
--print @strSQL
END
关注点
有关更多信息,请访问 http://www.creativyst.com/Doc/Articles/SoundEx1/SoundEx1.htm。
问题:即使当时还没有电话,他们为什么将其命名为“语音搜索”???
历史
还没有!