我已經在SQL中創建了一個關鍵字搜索,它根據產品數據庫中的各個列獲取關鍵字列表並進行檢查。因此,您可以搜索標題,說明等。SQL關鍵字搜索將返回任何結果
我希望它返回所有結果,並在沒有任何返回的情況下跳過結果。
它適用於所有關鍵字都匹配的情況,但當一個或多個關鍵字沒有返回結果時它不起作用。我認爲需要檢查零結果或更好的方法將臨時表與產品表進行匹配。
在下面的例子中,如果我搜索「braun,washer」,我會得到兩個結果。
ProductId ProductName
23 Large Braun Washer
45 Small Washer by Braun
但是,我沒有得到任何結果,如果我搜索「布勞恩,洗衣機,」因爲沒有任何產品含有單詞「清洗」。我仍然希望得到前兩個命中的兩個結果。
--temp table for keyword values
create table #delimitedKeywords
(
[keywordID] int identity(1,1),
keywords varchar(100)
)
declare @keywordValues varchar(50);
declare @arrayLength int;
declare @position int;
declare @nextDelim int;
declare @prevDelim int;
declare @delimValue varchar(10);
set @keywordValues = 'braun,washer,washing,';
set @arrayLength = LEN(@keywordValues);
set @position = 1;
set @nextDelim = 0;
set @prevDelim = 0;
--loop through position
while @position <= @arrayLength
begin
--substring comma delimeter
set @nextDelim = CHARINDEX(',', @keywordValues, @position);
set @delimValue = (SUBSTRING(@keywordValues, @position, @nextDelim - @prevDelim -1));
--stop loop if at end
if LEN(@delimValue) > 0
BEGIN
insert into #delimitedKeywords
(keywords)
values
(@delimValue);
END
set @prevDelim = @nextDelim;
set @position= @nextDelim+1;
end
begin
--select the keywords from the temp table to search on
declare @Keyword varchar(100)
select @Keyword = [keywords] from #delimitedKeywords
--search product table
SELECT [ProductId]
,[ProductName]
,[ProductDescription]
,[ProductBrief]
,[ProductSpecification]
FROM [Product]
WHERE
[ProductName] like '%' + @Keyword + '%'
OR [ProductDescription] like '%' + @Keyword + '%'
OR [ProductSpecification] like '%' + @Keyword + '%'
OR [ProductBrief] like '%' + @Keyword + '%'
--drop temp
drop table #delimitedKeywords;
end
客戶端將單個SQL參數傳遞給MS SQL中的存儲過程。然後,SQL將參數拆分爲逗號分隔符,然後創建一個臨時表進行搜索。
最終我計劃對結果進行加權,以使標題的結果比其他地方更多。
我不能使用全文索引或第三方搜索插件。 – User970008
您正在從#delimitedKeywords中選擇@Keyword = [keywords]返回一個關鍵字 - 這是'清洗'。 – user1166147