抜粋:https://www.cnblogs.com/ljhdo/p/5041605.html
SQL Serverのフルテキスト検索(全文検索)は、フルテキストインデックスに応じて、テキスト検索機能の単語に基づいています。伝統的なフルテキストインデックスバランスツリー(Bツリー)とは異なりインデックスと逆インデックス(反転インデックス)と呼ばれるデータテーブルで構成されている列インデックス、、、ユニークワード及び鍵格納行との間のマッピング関係を格納します。フルテキストインデックスやフルテキストインデックスを更新するときに反転インデックスが自動的に作成され、SQL Serverによって維持されて作成されます。ワードブレーカ(ワードブレーカ)、ステマ(ステマ)とシソーラスアナライザー:フルテキストインデックスは、3つの主要な分析が含まれています。フルテキストインデックスデータ記憶装置は、副情報ワードであり、その位置、セグメンテーションは、文法規則、特定の言語に基づいて、特定のシンボルに境界単語を探して、「単語」に分けたテキストは、それぞれの単語は、単語(用語)と呼ばれます。時々、フルテキスト索引語抽出幹、単一のステムとして格納誘導体様々な形態の幹、茎の抽出と呼ばれるプロセス、同義語のリストから、ユーザによって提供される定義によれば、関連語は同義語に変換するため、このプロセス抽出同義語と呼ばれます。
フルテキストインデックスを生成することは、ユーザ・テーブルのテキストデータであり、処理後の最後のデータであるストップワード(ストップワード)ワードを除外するために、ワード(ワードブレーカ)と抽出されたステム(ステマー)、及び変換シノニム(シソーラス)を行いますフルテキストインデックスに保存されています。データ記憶プロセスへのフルテキストデータ(移入)充填と呼ばれるか、または爬虫類(クロール)プロセス、フルテキストインデックス更新モードは、手動、自動充填、または増分集団を充填することができます。
フルテキスト検索の基本的なコンポーネント
1、トークナイザ
トークナイザ(ワードブレーカ)、名前は、単語を意味し、それはテキスト内の単語を分割し、言語固有の構文規則に従う、時単語が単語を分解し、また、文字列の各単語の位置を記録し、トークナイザ情報ワード、ワード位置、文書ID、シーケンス番号などのフルテキストインデックス列の組み合わせ、と呼ばれるマーク(トークン)。
たとえば、次の文は、フルテキストインデックスを満たしたとき、単語が文の5つの単語に分割され、「キティはかわいい猫である」:キティ、、、かわいい 、猫。
ストップワードはフルテキストインデックスに追加されていませんが、単語の位置が考慮されますが。「キティ」、「可愛い」とそれぞれ位置1、図4および図5において、「猫」。単語の位置によって、フルテキスト検索では
2、ストップワード
各ストップリストに保存されている単語は、フルテキストインデックスのストップワードが格納されていない、ストップワード(ストップワード)と呼ばれる、単語を検索していない無効に単語リスト(ストップリスト)非インデックス付きの単語リスト、しかし、ストップワードはcontians照会した場合にはストップワードのシェア位置はストップワードがフィールドに、基になるテーブル(基礎となる表)に存在していても、フルテキストインデックスは、任意のデータ行を返さない、記録されます。通常の状況下では、ストップワード(ストップワード)は、一般的にフルテキストクエリのパフォーマンスを、フルテキストインデックスのサイズを縮小向上させることができ、ストップワードをフィルタリングするために、発生頻度が非常に高い文である、単語を使用しています。
図3に示すように、ステム(ステマー)と同義語(シソーラス)
- RAN
- ランニング
- 実行
- ランナー(多分)
シソーラス(類語辞典)は同義語の言語固有のリストを定義するXMLファイルで、例えば、私たちは、「著者」、「ライター」、設定できる 「ジャーナリスト」 は同義です。
第二に、フルテキストインデックスを作成します
フルテキストインデックスを作成する前に、フルテキストカタログ(フルテキストカタログ)、組織のフルテキストインデックス、コンテナのフルテキストインデックスのフルテキストカタログを作成する必要があります。各フルテキストインデックスは、フルテキストカタログに属している必要があります。フルテキストカタログは、保管場所に依存しないフルテキストインデックスによれば、論理構造、データベース(スキーマ)のアーキテクチャと同じです。
フルテキストカタログcatalog_testを作成し 、デフォルトとして、
フルテキストインデックスを作成するために、ユニーク(一意)、単一行(単列)、非空(null非許容)インデックスが存在しなければならない、テキストエンジンは、テーブルに基づいてテーブルデータマップに基づいて、各列にインデックスを使用しますユニーク索引キーは、転置インデックスは、インデックスとキーワードとの間のマッピング関係を格納しています。
一意のインデックスを作成uidx_dbLogID [DBO]の[DatabaseLog]。 ([DatabaseLogID])。
各テーブルには、フルテキストインデックスを作成することができ、フルテキストインデックスを作成するとき、あなたはフルテキストインデックスファイル格納されているグループ、ストップワードの関連するフルテキストインデックスの更新モードのリストを考慮する必要があり、言語に関連付けられたフルテキストインデックスとテキストは、列のフルテキストインデックスを作成する必要がありますそれは、次のようなテキストフィールド、次のとおりです。
フルテキストインデックスを作成する の[DBO] [DatabaseLog]。 ( [TSQL]言語1033 ) キーインデックスui_dbLogID オン(catalog_test、ファイルグループ[プライマリ]) と(CHANGE_TRACKINGが、オフない集団、ストップリスト=システム=なし)。
1言語(言語)
オプション言語は列レベルの言語を指定するために使用される、任意であり、オプションの値は、言語名またはLCIDすることができ、無言語オプションならば、SQL Serverインスタンスのデフォルト言語を使用しています。システムビューから sys.fulltext_languages(のTransact-SQL)は、システムLCIDと言語の名前でサポートされていると、それに対応する表示します。
2、フルテキストカタログ(fulltext_catalog)
Fulltext_catalog_nameは、フルテキストインデックスをグループ化するためのオプションを指定します
図3に示すように、ファイルグループ(ファイルグループ)
オプションファイルグループ ファイルグループ、そしてフルテキストインデックスと同じファイルグループに保存されている基礎となるテーブルを指定しない場合は、フルテキストインデックスを指定するために使用されるファイルグループfilegroup_nameは、保存されています。フルテキストインデックスは、IO集中操作に更新されるので、従って、高速フルテキストインデックスの更新、フルテキストインデックスは、好ましくは、最大同時IOを達成するために、ハードディスク上のファイルまたはテーブルの基本セットから物理的に異なるに格納されています。
道のフルテキストインデックスでいっぱい4、
そして、データ更新基づいて、フルテキストインデックスは、デフォルトの動作であり、自動的に更新されなければならない同じ一般的な指標は、自動的にフルテキストインデックスを更新手動で時間間隔でフルテキストインデックス、または特定のポイントを更新するように構成することができます。
オプションCHANGE_TRACKINGは、フルテキストインデックスに同期させることに関連するデータの更新(更新、削除、または挿入)が必要で、フルテキストインデックス列を指定するために使用されます、
- CHANGE_TRACKING = MANUAL:手動アップデート
- = CHANGE_TRACKING :AUTO、データベーステーブルの変更は、自動的にフルテキストインデックスを更新自動更新、デフォルトの設定を、
- = CHANGE_TRACKINGのOFF、NO人口:更新されていない、NO人口オプションが指定され、フルテキストインデックスを作成した後、SQL Serverは、更新(移入)フルテキストインデックスしないことを示している; NO人口オプションが指定されていない場合、あなたはフルテキストインデックスを作成した後、SQL Serverのフルテキストの更新をインデックス。
図5に示すように、ストップワード(STOPLIST)
また、ノイズワードとして知られているストップワード(ストップワード)は、各フルテキストインデックスは、デフォルトでは、ストップワードのリストに関連付けされ、フルテキストインデックスシステムは、ストップワード(システムストップリスト)関連しています。フルテキストインデックス内の単語から削除フルテキストエンジンストップワードはストップワードが含まれていません。
STOPLIST [=] {OFF | SYSTEM | stoplist_name}
第三に、フルテキストインデックスを埋めます
フルテキストインデックスを充填、また、クローラ(クロール)プロセス、または塗りつぶし(人口)プロセスと呼ばれます。そのシステムがアイドル状態のときに移入され、フルテキストインデックスのために選択しようとすると、大規模なシステムの量(IO、メモリ)のリソースを消費しますフルテキストインデックスを作成するか、埋めるため。あなたがフルテキストインデックスを作成する場合、オプションを指定することにより、 CHANGE_TRACKING = MANUAL、または CHANGE_TRACKING = OFFをNO人口は、、すぐに新しいフルテキストインデックス作成を記入しないであろう、ユーザーが選択することができ、システムがアイドル状態のときに充填操作を実行するには、alter全文インデックスステートメントを使用し、。唯一のフルテキストインデックスを充填した後、フルテキストインデックスはワードデータのベーステーブルが含まれています。
ALTERフルテキストインデックス のTABLE_NAMEに 開始{フル| インクリメンタル| 更新}人口。
フルテキストインデックスを更新するための3つの方法があります。
- FULL人口:完全に充填された、テーブルベースの各行から取得は、フルテキストインデックスを再プログラム。
- 増分作成:タイムスタンプを含む、基礎となるテーブルのフィールドことを条件とする増分人口、次いで充填からの時間が、更新後のデータのみがフルテキストインデックスに組み込まれます。
- UPDATE人口:最後の充填から再インデックス付け更新後充填は、更新データ行(挿入、更新、または削除)操作を実行します。
あなたは、フルテキストインデックスを作成するときに指定した場合、CHANGE_TRACKING = AUTO または CHANGE_TRACKING = OFFを 、新しいフルテキストインデックスは、直ちに充填のプロセスを開始します。
クエリ述語の使用は、フルテキストインデックスが含まれています
あなたは、クエリのフルテキストインデックスで使用したい場合は、フルテキストインデックスは通常、クエリに一致LIKEキーワードのテキストよりも複雑達成する述語CONTAINS使用して呼び出され、LIKEキーワードマッチングは、フルテキストインデックスを呼び出さない、あいまいです。
例えば、使用して単一の単語が正確にクエリに一致する実行する述語が含まれます。
[TSQL]を選択し 、[DBO]から[DatabaseLog]が。 ここで、(言語1033、[TSQL]、 'searchword')を含みます。
カスタム同義語の問い合わせに基づいてフルテキストクエリ、などと比較して、より速く、検索機能は、より複雑で、述語が含まれている使用して、完全一致の単語または単語の接頭辞を実行するだけでなく、クエリに一致するサポートするだけでなく、クエリのルートに基づいて実行することができ、 、距離ワードクエリの隣接配列に基づきます。しかし、同様に比較し、それが述語はサフィックスクエリに一致することはできませんが含まれています。
結果は、フルテキストインデックス列が指定したキーワードが含まれている場合、述語返しますブール値が含まれているかのパターン(模様)を検索し、TRUEを返し、そうでない場合、返すFALSEを。
、クエリ述語のサポート単語とフレーズクエリを含む単語が複数のスペースで区切られた単語により、単一の単語、フレーズ(句)を参照し、構成、フレーズのために、あなたは複数の単語フレーズからなる、二重引用符を使用する必要があります。
1、クエリの論理的な組み合わせ
使用して、およびでない、またはOR論理演算子や単語フレーズを複数に一致する複数の
(名前、 ' "山" OR "道" ')CONTAINS CONTAINS(名前、'山や道路を')
2、接頭辞問い合わせ
使用して、述語、プレフィックスマッチングが含まれている、など「プレフィックス%」と同じ機能、それは述語「*」ワイルドカード「*」プレフィックスが書かれたマッチング0個以上の文字に一致しているが含まれている以外: "『プレフィックス*』 」、唯一のフルテキストインデックスのプレフィックス一致を実行することができます。
(名前、 ' "チェーン*"')CONTAINS (名前、 ' "チェーン*" OR "フル*"')CONTAINS
3、クエリの同義語(シソーラス)または幹(ステマ)
ステマー(ステム)は、例えば、シンタックス順序に従って、英語の動詞の異なるバリエーションが数に応じて存在する(単数、複数)、人、緊張、およびこれらの単語は、相同です。
CONTAINS(説明、 'FORMSOF(INFLECTIONAL、乗っ)')
THESAURUS(同義語)は、あなたがXMLコンフィギュレーションをインポートする必要があり、SQL Serverが空の場合、デフォルトのシソーラスファイルを提供します。あなたがシソーラスファイル内で「著者」、「作家」、「ジャーナリスト」を設定した場合、使用フルテキストインデックスの問い合わせには、限り同義語のいずれかが正常に一致しているとすると、同義です。
CONTAINS(説明、 'FORMSOF(THESAURUS、作者)')
4、距離クエリ
クエリパターンは、クエリモードからクエリを指定するために使用される、近くの近くに使用する関数は、クエリ語に一致するデータの隣接する行は、以下の関数が定義されます。
NEAR(({<simple_term> | <prefix_term>} [、... N])、<maximum_distance>] [、<match_order>])
例えば:近機能指定された距離及び隣接するサブワードシーケンスマッチング、周辺((TERM1、TERM2、TERM3)、5)を使用して5を超えるべきではない任意の二つの用語は、周辺((TERM1、TERM2、TERM3)との間の距離を表し、真5)、この用語は、任意の2つのない5以下、及びよれのTERM1、TERM2、ストリング内TERM3配列中に存在するの距離を表します。
かかわらず、注文の介在距離の--regardless及び (COLUMN_NAME、「NEAR(TERM1、 『TERM3 term4を』)」)が含まは、 5の最大距離は、内、いずれかの順序で、「AA」および「BB」の--searches CONTAINS (COLUMN_NAME、 'NEAR((AA、BB)、5)') の距離によらずして、指定した順序--inが 含まれています(column_nameに、 'NEAR((月曜日、火曜日、水曜日)、MAX、TRUE)')
((TERM1、TERM2、TERM3)、5、true)の近くのために5番目の用語は、最も、TERM1とterm5との間に存在する、例えば内部検索ワード、 "TERM2" を、含まれていません。
CONTAINS(COLUMN_NAME、 'NEAR((AA、BB、CC)、5)')
このクエリは、次のテキスト、内部検索ワードのCCは、距離を計算しないことに注意してくださいと一致します。
BB 1の2つのCC 3 4 5 AA
例えば、本明細書において、単語自転車と最大距離の制御が10を超えることができない、ワード自転車フロント分詞を制御しなければなりません。
(コメント、 'NEAR((自転車、コントロール)、10、TRUE)')CONTAINS
SQL Serverがプライマリ、高速でLIKEキーワード豊かな、フルテキスト検索機能、容易なメンテナンスよりも全文検索機能を提供し、欠点は、フルテキスト検索機能が非常に制限されることである、実際の開発では、オープンソースの全文検索エンジンで使用することができます例えば、Solrの、elasticsearchなど、より強力な全文検索機能を開発します。