4

SQL Server 2008にフルテキストのインデックス付きテーブルがあり、FULLTEXTを使用して完全に一致するフレーズをクエリしようとしています。CONTAINSまたはLIKEの使用がこれに適しているとは思いません。他の場合、クエリが正確でない可能性があり(ユーザーがフレーズを二重引用符で囲まない)、一般にFREETEXTの柔軟性が必要だからです。

FREETEXTのドキュメント[MSDN]によると:

freetext_stringが二重引用符で囲まれている場合、代わりにフレーズ一致が実行されます。ステミングとシソーラスは実行されません。

これは私にこのようなクエリを信じさせるでしょう:

SELECT Description  
FROM Projects   
WHERE FREETEXT(Description, '"City Hall"')  

[説明]フィールドに「市庁舎」という用語が表示されている場合にのみ結果が返されますが、代わりに次のような結果が得られます。

1マニングホールのハンディキャップランプの設計。
2アンテナ調査。クライアント:City of Cranston EngineeringDept.3
国際テニス殿堂の火災による被害に関する構造調査。
4調査ヘラルドホールで提案された衛星設計のための屋根調査。
...など

明らかに、これらの結果には、私のフレーズの少なくとも1つの単語が含まれていますが、フレーズ自体は含まれていません。さらに悪いことに、結果はランク付けされると思っていましたが、実際に必要だった2つの結果(実際のフレーズが含まれているため)は埋もれています。

SELECT Description  
FROM Projects  
WHERE Description LIKE '%City Hall%'  

1マサチューセッツ州クインシーの既存の市庁舎の大規模な外装と内装の改修
2漏れに悩まされているポータケット市庁舎の塔の大まかな構造調査。

これは私がドキュメントを理解していない場合だと確信していますが、私が探しているものを達成する方法はありますか?つまり、引用符なしで検索文字列を渡して、現在取得しているものを正確に取得したり、引用符を使用して正確なフレーズのみを取得したりできるようにするにはどうすればよいでしょうか。

4

1 に答える 1

4

あなたが言っFREETEXTたように、フレーズ全体ではなく、フレーズ内のすべての単語を検索します。そのためには、CONTAINSステートメントを使用する必要があります。このような:

SELECT Description  
FROM Projects   
WHERE CONTAINS(Description, '"City Hall"')

結果のランクを取得したい場合は、 を使用する必要がありますCONTAINSTABLE。これはほぼ同じように機能しますが、検索テーブルの主キーを含む [Key] と結果のランクを示す [Rank] の 2 つの列を持つテーブルを返します。

于 2010-12-16T16:33:59.610 に答える