確定工作的搜索建議使用jQuery-UI自動完成從sql-sever 2008分貝的結果。使用AdventureWorks DB Products表進行測試。我想在這個例子中搜索兩個字段。產品編號和名稱。谷歌風格搜索建議與Levenshtein編輯距離
和香港專業教育學院想出這個迄今爲止...
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-」開頭的產品編號和頂部返回的結果是ProductNums以「A」開頭,儘管我在列表中的其他地方獲得了更多相關結果..
有關按搜索字符串的相關性對結果進行排序的任何想法?
編輯:
在問候的TQL實施levenschtein距離發現here(在以前的問題鏈接)...
我想知道什麼是確定的最大價值的最佳途徑發送到函數(在我上面的示例中爲6)
根據「似乎」爲我的給定數據集運行良好選擇一個任意值最好嗎?或者最好根據輸入字符串的長度進行動態調整...
我最初的想法是,值應該與searchString的長度成正比......所以搜索字符串成長,變得更具體..容忍減少...思想??
嗯,@ u07ch已經回答了你的前一個問題,越簡單,最有效的方法就是使用FULLTEXT索引。不僅搜索速度更快(速度更快),還可以查看詞的派生詞,並根據相關性獲得排名。 – Lamak 2010-12-23 15:40:23