/*テスト環境を作成する
WINXP(SP3)+SQL SERVER2005(SP3)*/
object_id('tb') が null でない場合
ドロップテーブルTB
行く
テーブルTBを作成する
(id int アイデンティティ(1,1),
タイトル varchar(200)、
詳細 varchar(1000)、
制約 pk_id 主キー (id) – フルテキスト インデックスを構築するときに必要です
)
TBに挿入します
「ロケッツはルーキーシューターと契約しようとしている」を選択してください」 バディンジャーとロケッツの契約交渉が昨日完了し、バディンガーはテイラーと同じ契約を結ぶことになると報じられている。以前、同メディアはテイラーとの契約は4年間で総額1万ドル相当で、そのうち最初の2年間は保証契約であることを明らかにしていた。ブディンジャーは数日以内にロケッツとの契約を正式に発表するとみられている。 '
すべてを結合する
「ウィーバーがギリシャの巨人と契約を結んだことが明らかになった」を選択、「インターナショナルバスケットボールネットワークによると、元ロケッツの選手バン・ウィーバーはギリシャの巨人オリンピアコスと契約を結んだ」ウィーバーは1万ドル相当の2年契約を受け取った。 '
すべてを結合する
select 「スパーズはレイカーズと戦うために多額の資金を費やした」、「スパーズはこの夏のオフシーズン中に数人の将軍を追加したと最近、Yahoo! Sports のインタビューで明らかにした。豪華な建物を建設するために贅沢税を投入したラインナップは、レイカーズと戦い、5回目のチャンピオンシップを目指すように設計されています。 '
すべてを結合する
デイリー・ヘラルド紙によると、「ウォレスはモーターシティを離れることを考えたことはない」、「ベン・ウォレスはデトロイト・ピストンズに復帰することに同意し、ベテランの最低年俸でピストンズと年俸1万ドルの契約を結んだ」とコラムニストのミックが報じた。マグロウは、当時NBAを支配していたインテリオールディフェンスプレーヤーがピストンズを離れることなど考えもしなかったことを明かした。 '
すべてを結合する
「ミラーは愛のために戦い、妻を追い求めるのがとても上手です」、「レジー・ミラーがペイサーズで「ミラー・タイム」を作り上げるのを見たことがない「後進」たちに、この元NBAスターをどのように紹介すべきでしょうか?それは一昨日、ロサンゼルスのマリブビーチ上空で飛行機が引いた横断幕から始まったのだろうか?残念ながら、そんなことをする親はいないでしょう。 '
すべてを結合する
「ヤオ・ミン:私は上海を投資プロジェクトとして扱っていませんでしたが、良い人としてビジネスをすることに満足していました。」を選択してください、「ヤオ・ミン」は言いました:広告効果に不足のないヤオ・ミンは、上海東方バスケットボールクラブは消滅の危機に瀕しており、彼が元のために生計を立てたいと本当に望んでいることを示しています 親チームは何かをします。 '
すべてを結合する
「ロケッツはウィザーズに負けて年間記録が止まった」、「ヤオ・マイのコンビは今シーズン調子が悪かったが、シュートでリバウンドとブロックを決め、マグレディはリバウンドとアシストを決めた」を選択。 2人は協力してリバウンドを2回記録した。 '
ステップ 1: データベースの全文インデックス作成を有効にする
sp_fulltext_database enable -- データベースの全文インデックス作成を有効にします。
行く
ステップ 2: フルテキスト カタログを作成する
フルテキスト カタログ tb_fulltext を作成する
パス N'D:Program FilesMicrosoft SQL Server2005MSSQL.1MSSQLFTData' 内
with Accent_sensitivity =on -- アクセントを区別します
authorization dbo; -- フルテキスト カタログの所有者
ステップ 3: フルテキスト インデックスを作成する
TB に全文インデックスを作成する
(タイトル、詳細)
キー インデックス pk_id -- インデックス列を指定します。パフォーマンスを向上させるには、クラスター化インデックスを使用するのが最善です。
tb_fulltext で
with change_tracking auto -- 関連付けられたテーブルでデータが変更されたときに、フルテキスト インデックスを自動的に更新します。
ステップ 4: クエリの例:
*をTBから選択してください
where contains((タイトル,詳細),'ヤオ・ミン')
クエリ構文:
1. 特定の単語を検索します: contains(detail,'Yao Ming')
2. 特定の語句を検索します。「」を使用して語句を二重引用符で囲み、contains(detail,'Yao Ming Shanghai')
3. 複数の列から単語や語句を検索します: contains((title,detail),'Yao Ming Shanghai')
4. 指定したテキストで始まる単語または語句を検索します。 contains(detail,'"Yao Ming*"')
テキストとアスタリスクが二重引用符で囲まれていない場合、全文検索ではアスタリスクが 1 文字として扱われます。検索がフレーズの場合、フレーズ内の各単語は接頭辞とみなされます。 contains(detail,'"Yao Ming Shanghai*"') は、最初の単語が Yao Ming で始まり、2 番目の単語が Shanghai で始まる結果を返します。
5. 特定の単語のバリエーションを検索します: contains(detail,'formsof(inflectional,ride)')
テーブル内のride、rides、riding、ridedを含む行を返します。
6. 別の単語またはフレーズに近い単語またはフレーズを検索します。 contains(detail,'上海近くの姚明')
7. 重み付けされた値を使用する単語またはフレーズ: contains(description,'isabout(performanceweight(.8),comfortableweight(.4),smoothweight(.2))')
Weight は、各単語または語句に 0.0 ~ 1.0 の範囲の重み値を割り当てます。
8. 複数の検索条件を使用します: contains(detail,'"Yao Ming" or "Shanghai"')
contains(detail,'"姚明"と"上海"')
contains(detail,'「上海」ではなく「姚明」')
9. contains で変数を使用することもできます
10. 同義語の検索 contains(title,'formsof(thesaurus,on)')
【テスト】
上記の例では、次のように実行します。
*をTBから選択してください
where contains(title,'上海')
結果:
ID タイトル詳細
6 姚明:彼は上海を投資プロジェクトとは考えていませんでした。彼は良いビジネスマンであることに満足し、良い人になりました。「姚明は広告効果に不足がないので、上海東洋を買収しました。」消滅寸前だったバスケットボール部に、元親チームのために何かをしたいという気持ちが表れている。
ただし、次を実行します。
*をTBから選択してください
where contains(title,''上'')
結果は空のセットになります。
理由: フルテキスト インデックス クエリを実行する場合、「上」は簡体字中国語の干渉単語です。つまり、クエリ中に無視されます。また、フルテキスト インデックスを作成する場合、フレーズは通常次のように使用されます。単一の単語の代わりにインデックス項目を使用します。
このクエリを再度実行し、最初のクエリの結果を確認したい場合は、フルテキスト インデックスのシソーラスを変更できます。
ノイズ ワードと同義語ファイルが存在するパス:
D:Program FilesMicrosoft SQL Server2005MSSQL.1MSSQLFTData それぞれのファイル名は簡単に識別できる必要があります。
シソーラスを変更する方法を簡単に紹介します。
1. メモ帳を使用して、簡体字中国語の同義語ライブラリである tschs.xml を開きます。
<XML ID="Microsoft 検索シソーラス">
<!-- コメントアウトされました
<thesaurus xmlns="x-schema:tsSchema.xml">
<diacritics_sensitive>0</diacritics_sensitive>
<拡張>
<sub>Internet Explorer</sub>
<sub>IE</sub>
<sub>IE5</sub>
</展開>
<交換>
<pat>NT5</pat>
<pat>W2K</pat>
<sub>Windows 2000</sub>
</置換>
<拡張>
<sub>実行</sub>
<sub>ジョギング</sub>
</展開>
</シソーラス>
-->
</XML>
説明する:
<交換>
<pat>NT5</pat>
<pat>W2K</pat>
<sub>Windows 2000</sub>
</置換>
つまり、W2K をクエリする場合、クエリ用に Windows 2000 に自動的に置き換えられます。
<拡張>
<sub>実行</sub>
<sub>ジョギング</sub>
</展開>
これは同義語ライブラリです。つまり、run をクエリすると、jog も検索されます。
この例では、以下を追加します。
<拡張>
<sub>上</sub>
<sub>上海</sub>
</展開>
2. 最後から始まるコメント行を削除します。
<!-- コメントアウトされました
-->
3. 最終結果は次のようになります。
<XML ID="Microsoft 検索シソーラス">
<thesaurus xmlns="x-schema:tsSchema.xml">
<diacritics_sensitive>0</diacritics_sensitive>
<拡張>
<sub>Internet Explorer</sub>
<sub>IE</sub>
<sub>IE5</sub>
</展開>
<交換>
<pat>NT5</pat>
<pat>W2K</pat>
<sub>Windows 2000</sub>
</置換>
<拡張>
<sub>実行</sub>
<sub>ジョギング</sub>
</展開>
<拡張>
<sub>上</sub>
<sub>上海</sub>
</展開>
</シソーラス>
</XML>
3. クエリ ステートメントを実行します。
*をTBから選択してください
where contains(title,'formsof(thesaurus,on)')
クエリ結果が contains(title,'Shanghai') と同じであることがわかります。