フレーズマッチングではなく、SQL Server 2008のフリーテキストクエリ

StackOverflow https://stackoverflow.com/questions/4462875

  •  11-10-2019
  •  | 
  •  

質問

SQL Server 2008には、FullTextを使用して正確なフレーズマッチをクエリしようとしている全文インデックステーブルがあります。他のケースではクエリが正確ではない可能性があるため(ユーザーは二重引用符ではフレーズをサラウンドしていない)、一般的にフリーテキストの柔軟性を望んでいるため、これに適しているとは考えていません。

による ドキュメンテーションMSDN] FREETEXTの場合:

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

それは私にこのような質問を信じるように導くでしょう:

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

「市役所」という用語が説明フィールドに表示される結果のみを返しますが、代わりに次のような結果が得られます。

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

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

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

1クインシーマサチューセッツ向けの既存の市役所の1つの主要な外観と内部改修
2漏れに悩まされているポータケット市役所のタワーの大まかな構造調査。

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

役に立ちましたか?

解決

あなたが言ったように、 FREETEXT フレーズではなく、フレーズのすべての単語を調べてください。そのためには、使用する必要があります CONTAINS 声明。このような:

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

結果のランクを取得したい場合は、使用する必要があります CONTAINSTABLE. 。ほぼ同じ動作しますが、2つの列のあるテーブルを返します。[key] wichには、検索テーブルの主キーと[rank]が含まれており、結果のランクが得られます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top