sql >> データベース >  >> RDS >> Sqlserver

初心者向けのSQLServer2016での全文検索の実装

    この記事では、初心者が始めるための全文検索とその実装について説明します。

    さらに、読者は全文検索を適切に機能させるための重要なことを知っています。

    この記事では、全文検索を使用してテキストパターンを照合し、同様の種類の要件を満たすことの重要性についても説明します。

    全文検索について

    定義を使用して全文検索を理解しましょう。

    簡単な定義

    全文検索は、文字ベースのデータを最適に検索して迅速な回答を得るために使用されます。

    Microsoftの定義

    SQLServerおよびAzureSQLデータベース(SQLデータベースのクラウドバージョン)での全文検索により、ユーザーとアプリケーションはSQLServerテーブルの文字ベースのデータに対して全文クエリを実行できます。

    フルテキストクエリとは

    フルテキストクエリは、データのパターンを見つけるためにテキストデータを含む列に対して記述および実行される特殊な種類のクエリです。この件については、これらの列で全文検索を有効にする必要があります。

    互換性

    全文検索は、次のSQLServerバージョンと互換性があります。

    1. SQLServer2005以降
    2. AzureSQLデータベース

    全文検索の最新バージョン

    SQL2016などの最近のSQLServerバージョンでは、全文検索をセマンティック検索と一緒にインストールできます。

    全文検索–SQLServerオプション

    SQL Serverをインストールする場合、デフォルトでは全文検索はインストールされないことに注意してください。 SQL Serverのインストールに最初に使用したセットアップを使用して、現在のSQLインスタンスに機能を追加することにより、オプションでインストールする必要があります。

    全文検索–データベースのデフォルト

    すべてのSQLデータベースは、デフォルトで全文検索で使用できるようになっています。 SQLデータベースで全文検索を使用する前の要件を除いて、これ以上のインストールは必要ありません。

    大文字と小文字の区別

    Microsoftのドキュメントによると、全文検索では大文字と小文字が区別されないため、「コントロールパネル」、「コントロールパネル」、「コントロールパネル」という単語はすべて同じように扱われます。

    全文検索の設定

    前述のように、SQL Serverのインストールに使用したのと同じセットアップファイルを使用して、既存のSQLServerインストールに全文検索を機能として追加する必要があります。

    SQLインストーラーの実行

    SQLServerインストーラーを実行することから始めます。保存するのではなく、インストーラーから直接実行する場合は、ドライブとしてマウントするオプションがあります。

    セットアップファイルの実行

    Setup.exeファイルをクリックして、SQLServerセットアップを実行します。

    機能として追加

    セットアップファイルを実行するとすぐに、いくつかの初期チェックが実行されます。これらのチェックに合格したら、「既存のインストールオプションに機能を追加する」を選択する必要があります。 インストールナビゲーションバー(セクション)の下:

    現在のサーバーを選択してください

    次に、全文検索をインストールする現在の/潜在的なサーバーを選択します。私たちの場合はSQL2016です:

    追加するインスタンス機能を選択

    次に、検索用のフルテキストおよびセマンティック抽出を選択します 追加する機能(古いバージョンのSQLにこの機能を追加すると、セマンティック抽出が表示されない場合があります):

    ウォークスルーの前にこの機能をすでに追加しているため、スクリーンショットでは灰色で表示されていることに注意してください。ただし、初めて追加する場合は、アクティブになり、インストールできるようになります。これには少し時間がかかります。

    全文検索のインストールステータスを確認する

    全文検索をインストールしたら、マスターデータベースに対して次のT-SQLスクリプトを実行して確認できます。

    -- Is Full-Text Search installed then 1 or 0
    
    SELECT fulltextserviceproperty('IsFulltextInstalled') as [Full-Text Search]

    全文検索を正常にインストールすると、スクリプトが実行されていることを意味する「1」が表示されます。

    全文検索を使用した単語やフレーズの検索

    次に、全文検索を使用して単語やフレーズの基本的な検索操作を実行します。

    サンプルデータベースのセットアップ

    全文検索の基本的な使用法を理解するために、 SQLDevBlogV6というサンプルデータベースを設定しましょう。 次のように:

    -- Create sample database (SQLDevBlogV6)
    
    CREATE DATABASE SQLDevBlogV6;
    
    GO
    
    
    
    
    
    USE SQLDevBlogV6;
    
    
    
    -- (1) Create Article table in the sample database
    
    CREATE TABLE [dbo].[Article] (
    
    [ArticleId] INT IDENTITY (1, 1) NOT NULL,
    
    [Category] VARCHAR (50) NULL,
    
    [Author] VARCHAR (50) NULL,
    
    [Title] VARCHAR (150) NULL,
    
    [Published] DATETIME2 (7) NULL,
    
    [Notes] VARCHAR (400) NULL,
    
    CONSTRAINT [PK_Article] PRIMARY KEY (ArticleId)
    
    );
    
    
    
    GO
    
    
    
    -- (2) Populate the table with data
    
    SET IDENTITY_INSERT [dbo].[Article] ON
    
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (1, N'Development', N'Atif', N'Introduction to T-SQL Programming ', N'2017-01-01 00:00:00', NULL)
    
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (2, N'Testing', N'Peter', N'Database Unit Testing Fundamentals', N'2017-01-10 00:00:00', NULL)
    
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (3, N'DLM', N'Sadaf', N'Database Lifecycle Management for beginners', N'2017-01-20 00:00:00', NULL)
    
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (4, N'Development', N'Peter', N'Common Table Expressions (CTE)', N'2017-02-10 00:00:00', NULL)
    
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (5, N'Testing', N'Sadaf', N'Manual Testing vs. Automated Testing', N'2017-03-20 00:00:00', NULL)
    
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (6, N'Testing', N'Atif', N'Beyond Database Unit Testing', N'2017-11-10 00:00:00', NULL)
    
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (7, N'Testing', N'Sadaf', N'Cross Database Unit Testing', N'2017-12-20 00:00:00', NULL)
    
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (8, N'Development', N'Peter', N'SQLCMD - A Handy Utility for Developers', N'2018-01-10 00:00:00', NULL)
    
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (9, N'Testing', N'Sadaf', N'Scripting and Testing Database for beginners ', N'2018-02-15 00:00:00', NULL)
    
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (10, N'Development', N'Atif', N'Advanced Database Development Methods', N'2018-07-10 00:00:00', NULL)
    
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (11, N'Testing', N'Sadaf', N'How to Write Unit Tests for your Database', N'2018-11-10 00:00:00', NULL)
    
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (12, N'Development', N'Peter', N'Database Development using Modern Tools', N'2018-12-10 00:00:00', NULL)
    
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (13, N'DLM', N'Atif', N'Designing, Developing and Deploying Database', N'2019-01-01 00:00:00', NULL)
    
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (14, N'DLM', N'Peter', N'How to Apply Database Lifecycle Management', N'2019-02-10 00:00:00', NULL)
    
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (15, N'Testing', N'Saqib', N'SQL Unit Testing Stored Procedures', N'2019-03-10 00:00:00', NULL)
    
    SET IDENTITY_INSERT [dbo].[Article] OFF

    フレーズと単語

    全文検索のコンテキストで、より多くのフレーズや単語を表示してみましょう。これにより、全文検索で何を探しているのかがよくわかります。

    ステートメント「T-SQLの概要 」はフレーズであり、「はじめに 」および「T-SQL 」は興味のある言葉です。

    SQLServerで全文検索を実装する手順

    全文検索は、次の方法で実装されます。

    1. フルテキストカタログを作成します(フルテキストインデックスを保存します)。
    2. テーブルまたはインデックス付きビューでフルテキストインデックスを定義します。
    3. CONTAINSまたはFREETEXTを使用して全文検索クエリを実行し、単語やフレーズを検索します。

    フルテキストカタログを作成する

    これで、サンプルデータベース(SQLDevBlogV6)が正常に作成され、データが入力されました。フルテキストカタログの作成は、フルテキスト検索を実装するための最初のステップです。

    オブジェクトエクスプローラーに移動します SQL Serverで、[データベース]を展開します ノードをクリックし、SQLDevBlogV6をクリックします。

    ストレージをクリックします 、[フルテキストカタログ]をクリックします 次に、[新しいフルテキストカタログ:]をクリックします。

    カタログ名をDevBlogCatalog、として入力します OK:をクリックします

    新しく作成されたフルテキストカタログは次のようになります。

    テーブルにフルテキストインデックスを定義する

    記事を右クリックします 表をクリックし、フルテキストインデックスをクリックします。 次に、[フルテキストインデックスの定義]をクリックします。 以下に示すように:

    これにより、フルテキストインデックス作成ウィザードがトリガーされます。 次へをクリックします 、[次へ]をクリックします 再度、テーブルの主キーがウィザードによって事前に選択されていることを確認した後。

    次のステップで、タイトルを選択します フルテキストクエリの列。これは、フルテキストクエリを実行する対象の列です:

    次に、デフォルトのオプションを選択して、自動的にを選択し、変更の追跡を自動化します。 以下に示すオプション(他のオプションを選択することに興味がない場合):

    次のステップでは、フルテキストカタログ(DevBlogCatalog)を選択して、このウォークスルーで前に定義したフルテキストインデックスに関連付けてください。次に、以下に示すようにデフォルトのオプションを選択した後、[次へ]をクリックします。

    次へをクリックします オプションの手順をスキップして、[完了]をクリックします フルテキストインデックスが正常に作成されたことを確認します。

    タイトルに対してフルテキストクエリを実行できるようになりました 表の列記事 全文検索を有効にしてくれてありがとう。

    フルテキストクエリを使用した単語テストの検索

    CONTAINS を使用して、単語をすばやく検索できるようになりました 次のT-SQLスクリプトを記述して、キーワード(述語)を作成します。

    -- Search for the Word Testing using Full-Text Query
    
    SELECT * FROM dbo.Article
    
    WHERE CONTAINS(Title,'Testing')

    テストを検索するための結果 タイトルの単語 列は次のとおりです:

    全文検索なしでLike演算子を使用しても同じ結果が得られることに注意してください。違いは、何百万もの行に対してこのクエリを実行している場合と、LIKE演算子が苦労している場合です。一方、専門家によると、CONTAINSの方がはるかに高速です。

    フルテキストクエリを使用して初心者向けのフレーズを検索

    「初心者向け」というフレーズが含まれるすべての記事を見つけましょう タイトルに使用されています。これは、初心者がすぐに始めるのに役立ちます。

    今回はFREETEXTを使用しています キーワード(述語)。次のT-SQLスクリプトを使用して、初心者向けのすべての記事を入手できます。

    -- Search for Phrase: for beginners using Full-Text Query
    
    SELECT * FROM dbo.Article
    
    WHERE FREETEXT(Title,'for beginners')

    出力は次のとおりです。

    おめでとうございます、あなたは全文検索の基本を無事に学びました。また、単語やフレーズの全文検索クエリを設定して実行する実践的な経験も得られました。

    今後の記事で高度な全文検索の使用法について説明しているので、連絡を取り合ってください。多くの場合、データベース分析シナリオで役立ちます。

    やるべきこと

    全文検索を設定して全文クエリを実行できるようになったので、スキルを向上させるために次のことを試してください。

    1. データベースにデータを入力してみてくださいメモ 記事に関する詳細情報を提供することにより、列。その後、フルテキストカタログを定義し、フルテキストクエリを実行して、CONTAINSキーワードとFREETEXTキーワードを使用して単語やフレーズを検索する必要があります。
    2. また、単語 Unitを検索します この単語が言及されているすべての記事を見つけるために。単体テスト、単体テスト、または単体テストとして列に格納される場合があります。
    3. この記事のサンプルデータベースを参照してください。テーブルの全文検索を設定する製品、name、にフルテキストインデックスを定義します できるだけ多くのレコードを追加します。選択した単語やフレーズを検索して、目的の製品(名前)を見つけます。


    1. 変数を宣言して同じOracleSQLスクリプトで使用するにはどうすればよいですか?

    2. Heroku Postgres:接続が多すぎます。これらの接続を切断するにはどうすればよいですか?

    3. 修正方法「関連付けられたパーティション関数は、スキームで言及されているファイルグループよりも多くのパーティションを生成します」SQLServerのメッセージ7707

    4. SQLParameterはSQLインジェクションをどのように防ぎますか?