1

MSSQL 2005 データベースから一致する行を返す単純な検索テキスト ボックスを備えた asp.net Web ページがあります。現在、LIKE ステートメントを使用して一致を戻していますが、ユーザーは正確なフレーズを入力する必要があります。ユーザーはより多くの Google 検索タイプのエクスペリエンスを求めているため、FTS を使用して必要なテーブルをセットアップしてインデックスを作成することにしました。

ユーザーがテキスト ボックスに入力する各単語を NEAR で区切って CONTAINS 検索で使用する単語または単語を検索してほしいと思います。私は新しい開発者で、これを行う方法がわかりません。または、これをカバーする組み込み関数が既にあるかどうかもわかりません。

たとえば、ユーザーが検索ボックスに「Sawyer Tom」と入力すると、クエリは次のように機能します。

SELECT BookID, BookTitle FROM tblBooks WHERE CONTAINS(BookTitle, 'Sawyer NEAR Tom')

そして戻る:

12032 トム・ソーヤーの冒険

現在、ユーザー検索で like ステートメントを使用しても、一致するものは見つかりません。

ユーザーが単純に Sawyer と入力した場合、クエリは次のように単純に機能するはずです。

SELECT BookID, BookTitle FROM tblBooks WHERE CONTAINS(BookTitle, 'Sawyer')

戻る:

12032 トム・ソーヤーの冒険 72192 ロイ・クレインのバズ・ソーヤー: 太平洋戦争 (Vol. 1)

私の現在のコードは、次のように検索文字列をクエリに差し込むだけです。

SELECT BookID, BookTitle FROM tblBooks WHERE CONTAINS(BookTitle, @Search)

これは明らかに機能しません。各単語を NEAR で自動的に区切るにはどうすればよいですか?

あなたが提供できる助けを前もって本当にありがとう!

-デビッド

4

1 に答える 1

0

まず、入力@Search変数を単語に分割する必要があります。

これを実現するUDFのブログ投稿は次のとおりです。

varcharをWordに分割するT-SQL

次に、返された各単語を調べ、各単語を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
于 2010-01-28T17:23:50.540 に答える