sql-sever2008dbの結果を使用してjQuery-UIオートコンプリートを使用して検索候補に取り組んでいます。テストにAdventureWorksDBProductsテーブルを使用する。この例では、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」で始まるProductNumです。
検索文字列との関連性の観点から結果を並べ替えるためのアイデアはありますか?
編集:
ここにあるlevenschtein距離のtql実装に関して(前の質問にリンクされています)...
関数に送信するMAX値を決定するための最良の方法は何でしょうか(上記の例では6)
与えられたデータセットに対してうまく機能すると思われるものに基づいて、任意の値を選択するのが最善でしょうか?または、入力文字列の長さに基づいて動的に調整するのが最善でしょうか。
私の最初の考えは、toの値はsearchStringの長さに非常に比例する必要があるということでした...検索文字列が大きくなり、より具体的になるにつれて、許容範囲が減少します...思考??