2010-01-28 59 views
1

我有一個帶有簡單搜索文本框的asp.net網頁,該文本框從MSSQL 2005數據庫返回匹配行。它目前使用LIKE語句來恢復匹配,但強制用戶鍵入一個精確的短語。用戶希望獲得更多的Google搜索類型體驗,因此我決定使用FTS設置和索引所需的表格。SQL 2005全文搜索:如何將所有用戶搜索詞默認爲CONTAINS NEAR類型FTS搜索

我希望用戶搜索單詞或單詞用於CONTAINS搜索中,並用NEAR將他們鍵入的每個單詞分隔到文本框中。我是一名新開發人員,不知道如何執行此操作,或者是否已有內置函數來解決此問題。

因此,舉例來說,如果用戶鍵入 「索耶湯姆」 在搜索框中的查詢應該是這樣的功能:

SELECT的BookID,BOOKTITLE FROM tblBooks WHERE CONTAINS(BOOKTITLE,「索耶NEAR湯姆)

,並返回:

12032目前使用類似的語句我現在用戶搜索將找不到匹配的的湯姆·索亞

冒險。

如果用戶鍵入簡單索耶查詢應該簡單的功能是這樣的:

SELECT的BookID,BOOKTITLE FROM tblBooks WHERE CONTAINS(BOOKTITLE, '索亞')

返回:

12032湯姆索亞歷險記 72192 Roy Crane的Buz Sawyer:太平洋戰爭(第1卷)

我現在的代碼只是插在t他搜索字符串像這樣的查詢:

SELECT的BookID,BOOKTITLE FROM tblBooks WHERE CONTAINS(BOOKTITLE,@Search)

這顯然是行不通的。如何將每個單詞與NEAR自動分開?

非常感謝您提供的幫助!

-David

回答

0

首先,您需要將您輸入的@Search變量拆分爲單詞。

這裏有一個博客帖子有一個UDF,將完成的是:

T-SQL to Split a varchar into Words

接下來,你會期待通過每個字返回,並連接每一個字一個NEAR查詢。

事情是這樣的:

declare @words as TABLE(wordNum int identity primary key, word nvarchar(max)) 

insert into @words select [value] from dbo.SplitWords('my dog has fleas') 

declare @wordCount int 
select @wordCount = COUNT(*) from @words 

declare @searchString nvarchar(max) 
set @searchString = '' 

declare @thisWord nvarchar(max) 
set @thisWord = '' 

declare @i int 
set @i = 1 
WHILE @i <= @wordCount 
BEGIN 
    select @thisWord = word from @words where wordNum = @i 
    if @i = @wordCount 
     select @searchString = @searchString + @thisWord 
    else 
     select @searchString = @searchString + @thisWord + ' NEAR ' 
    SET @i = @i + 1 
END