好吧,伙计们正在使用 jQuery-UI AutoComplete 和来自 sql-sever 2008 db 的结果来处理搜索建议。使用 AdventureWorks DB Products 表进行测试。我想在此示例中搜索 2 个字段。产品编号和名称。
到目前为止,我想出了这个......
CREATE procedure [dbo].[procProductAutoComplete]
(
@searchString nvarchar(100)
)
as
begin
declare @param nvarchar(100);
set @param = LOWER(@searchString);
WITH Results(result)
AS
(
select TOP 10 Name as 'result'
from Production.Product
where LOWER(Name) like '%' + @param + '%' or (0 <= dbo.lvn(@param, LOWER (Name), 6))
union
select TOP 10 ProductNumber as 'result'
from Production.Product
where LOWER(ProductNumber) like '%' + @param + '%' or (0 <= dbo.lvn(@param, LOWER(ProductNumber), 6))
)
SELECT TOP 20 * from Results
end;
我现在的问题是结果的排序......我得到了正确的结果,但它们只是按名称或产品编号排序,与输入字符串无关......
例如,我可以搜索以“BZ-”开头的产品编号,并且返回的顶部结果是以“A”开头的 ProductNums,尽管我确实在列表的其他地方获得了更多相关的结果..
根据与搜索字符串的相关性对结果进行排序的任何想法?
编辑:
关于在此处找到的 levenschtein 距离的 tql 实施(链接到上一个问题)...
我想知道确定发送到函数的 MAX 值的最佳方法是什么(在我上面的示例中为 6)
最好根据“似乎”对我的给定数据集有效的值来选择任意值吗?还是最好根据输入字符串的长度动态调整它...
我最初的想法是该值应该与 searchString 的长度成反比......所以随着搜索字符串的增长并变得更加具体......容差减少......想法?