2010-12-16 13 views
3

FULLTEXTを使用して完全なフレーズマッチをクエリしようとしているSQL Server 2008のフルテキストインデックステーブルがあります。私はCONTAINSやLIKEの使用がこれに適しているとは思っていません。他のケースでは、クエリが正確ではないかもしれません(ユーザーが二重引用符でフレーズを囲んでいない)ので、一般的にFREETEXTの柔軟性が必要です。SQL Server 2008のFREETEXTクエリはフレーズマッチングではありません

FREETEXTためdocumentation [MSDN]によれば:

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

:用語「シティーホール」は説明欄に表示されますが、代わりに私はこのような結果を得るところ

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

結果のみを返します。このようなクエリを信じるように私につながる

1マニングホールでのハンディキャップランプの設計。
2アンテナ調査。クライアント:クランストン工学部の市
3国際テニス殿堂への火災被害に関する構造調査。
4ヘラルドホールの衛星設計に関する屋根調査
...など

明らかに、これらの結果は、少なくとも私の句の中の言葉の一つではなく、フレーズ自体が含まれます。さらに悪いことに、私は結果がランク付けされると思っていたが、私が実際に望んでいた2つの結果(実際のフレーズを含むため)が埋められている。リークに悩まさポータケット市役所塔のクインシーマサチューセッツ州
2ぞんざいな構造調査のための既存の市役所の

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

1主な内外装リフォーム。

これは私がドキュメントを理解していないケースですが、私が探しているものを達成する方法はありますか?つまり、引用符を使わずに検索文字列を渡して、私が今や引用しているものを正確に取得し、その正確なフレーズだけを得ることができるようにするには?

+1

私はこれが古いと知っていますが、同じ問題が発生し、このバグレポートが見つかりました。[FREETEXTはSQL Server 2008 R2では "フレーズ検索"として文書化されていません](http://connect.microsoft。SQL Server/feedback/details/683573/freetext-in-sql-server-2008-r2-no-longer-works-for-phrase-searches) – bfavaretto

答えて

4

あなたが言ったように、FREETEXTはあなたのフレーズのすべての単語を検索しますが、すべてのフレーズは検索しません。そのためには、CONTAINSステートメントを使用する必要があります。このように:あなたは結果のランクを取得したい場合は

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

、あなたはCONTAINSTABLEを使用する必要があります。大体同じですが、検索テーブルの主キーと[ランク]の2つの列を持つテーブルが返されます。これは結果のランクを示します。

+1

ドキュメントによれば、 「フレーズマッチが代わりに実行されます」というのは、正確なフレーズがマッチしたという意味ではありません(より良い用語がないため)。私はちょうどそれが誤解を招くことがあると思う。本質的に私が望むものを得るための方法はありません。私はsearchtermを解析し、引用された部分をCONTAINSクエリとして提出し、FREETEXTを使用して引用符で囲まないといけませんか? – MKing

+0

CONTAINSは、引用符付きのテキストの有無にかかわらず、FREETEXTと同様の動作をしません。違いは、FREETEXTは、正確な単語だけでなく、単語の派生物を見つけることです。 – Lamak

+0

よろしくお願いします。 – MKing

関連する問題