我们有一个位置搜索页面,这给我们带来了我以前从未遇到过的挑战。
在我们的数据库中,我们有一个城市、州等的列表以及相应的地理编码。到目前为止一切都很有趣......
我们在名为“威斯康星州 Black River Falls”的城市设有两家分店,最近又在“威斯康星州 River Falls”开设了一家分店。
所以我们的表有记录如下:
Location City State
-------------------------------------
1 Black River Falls WI
2 Black River Falls WI
3 River Falls WI
显然我们的查询使用了“LIKE”子句来匹配城市,但是当客户搜索文本“River Falls”时,在搜索结果中显示的第一个结果始终是“Black River Falls”。
在我们的应用程序中,我们始终使用第一个匹配项,并将其用作默认值。 (我们可以改变它,但这将是大量未预算的工作)
我知道我可以简单地更改排序顺序,让“River Falls”首先出现,但这是一个草率的解决方案,仅适用于这种情况。
我想知道是否有一种方法,通过 T-SQL (SQL Server 2008r2) 按“最佳匹配”排序,如果我们搜索“River Falls,WI”和“Black”,“River Falls”将“获胜”如果我们搜索威斯康星州“Black River Falls”,“River Falls”就会起作用。
您可以使用“不同之处 http://technet.microsoft.com/en-us/library/ms188753.aspx“使用最近的搜索功能SOUNDEX http://technet.microsoft.com/en-us/library/ms187384.aspx match.
Select * From Locations WHERE City=@City ORDER BY Difference(City, @City) DESC
来自 MSDN 文档:
返回的整数是 SOUNDEX 值中的字符数
是一样的。返回值范围从0到4:0
表示弱相似性或无相似性,4 表示强相似性或
相同的价值观。
DIFFERENCE 和 SOUNDEX 对排序规则敏感。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)