Azure SQL Database でフルテキスト検索機能のプレビューを提供開始
このポストは、4 月 30 日に投稿された Full-Text Search is now available for preview in Azure SQL Database の翻訳です。
Azure SQL Database を使用してデータを保存/管理するユーザーが増えていることに伴い、幅広いアプリケーションでフルテキスト検索機能の実装を求める声が急速に高まっています。この記事では、Azure SQL Database V12 でフルテキスト検索機能のプレビューの提供が開始されたこと、そして、提供される機能の概要と現時点での制限事項をご紹介します。
フルテキスト検索とは?
フルテキスト検索機能では、テーブルに格納されたテキスト データに対して、キーワードベースのクエリ用インデックスを高速かつ柔軟に作成することができます。インデックスは、char、varchar、nchar、nvarchar、text、ntext、image、xml、varbinary(max) の各データ型の列に対して作成できます。テキスト データが含まれる列だけでなく、組み込みでサポートされている型 (.html、.htm、.txt、.log、.xml、.java) のファイルが含まれるテーブル列に対しても作成が可能です。
フルテキスト検索は、次のアプリケーションやシステムでよく使用されます。
- Web ベース アプリケーション (Web サイト、製品カタログ、ニュース記事などのデータの検索)
- ドキュメント管理システム
- SQL Database に格納されたデータに対するテキスト検索機能を提供するカスタム アプリケーション
フルテキスト検索は、比較的少ない数の単純なクエリを使用するモバイル アプリや個人用アプリ、大量のテキスト データに対して大量のクエリを実行する複雑でミッションクリティカルなアプリに至るまで、さまざまなアプリケーションで利用できます。
使用を開始するには
フルテキスト検索機能は、Azure SQL Database V12 の Premium、Standard、Basic の各サービス レベルで提供されます。これ以外のサービスを構成する必要がないため、データベースですぐに使い始めることができます。フルテキスト検索機能には、次のような統合管理機能があります。
- 既存の Microsoft SQL Server ツールとフルテキスト検索機能を組み合わせることができます (最新の SQL Server 2014 修正プログラムの SSMS が必要)。
- Azure SQL Database のフルテキスト検索機能の構文は、Microsoft SQL Server の Transact-SQL クエリ構文と 100% 互換性があります。
以降では、例として Azure SQL Database のフルテキスト検索機能を使用する検索機能に的を絞ったワークフローをご紹介します。
手順 1: フルテキスト カタログの作成
例 : DBA として、データベースの既定の FT カタログを作成します。
CREATE FULLTEXT CATALOG ftCatalog AS DEFAULT;
手順 2: フルテキスト インデックスの作成
例 : 製品説明が含まれるテーブルに対して FT インデックスを作成します。これにより、製品に対するクエリを FTS 機能で処理できるようになります。手順としては、フルテキスト インデックスを作成するテーブルに、一意のインデックスと既定の FT カタログを定義します。
CREATE UNIQUE INDEX ui_ukProductDetails ON ProductDetails(ProductID);
CREATE FULLTEXT INDEX ON ProductDetails(Details) KEY INDEX ui_ukProductDetails ON ftCatalog;
手順 3: 作成の開始
例 : 製品詳細の FT インデックスを有効にし、続いてこの FT インデックスの完全作成を開始します。これにより、テーブルのデータを解析する処理と、選択した FT インデックスにインデックスを付ける処理が始まります。
ALTER FULLTEXT INDEX ON ProductDetails ENABLE;
GO
ALTER FULLTEXT INDEX ON ProductDetails START FULL POPULATION;
手順 4: フルテキスト検索の述語を使用したクエリ
例 : データベース開発者が検索機能を実行します。次のクエリでは、カジュアルな夏の (“casual summer”) 靴を見つけることができます。
SELECT ProductName, Price FROM ProductDetails WHERE Category = 'Shoes' AND CONTAINS(Details, 'casual AND summer');
例: 次のクエリの検索機能では、製品詳細に “run” という語を含む製品を検索できます。
SELECT ProductName, Details FROM ProductDetails WHERE CONTAINS(Details, 'formsof(freetext, run)');
手順 5:フルテキスト検索に関する動作のモニタリング
例 : 進行中のインデックス作成に関する情報を表示します。
SELECT * FROM sys.dm_fts_index_population
例 : フルテキスト インデックスのコンテンツを表示します。
SELECT * FROM sys.dm_fts_index_keywords( DB_ID('Product'), OBJECT_ID('ProductDetails'))
Azure SQL Database のフルテキスト検索機能の現時点での制限事項
Azure SQL Database V12 のフルテキスト検索機能では、Microsoft SQL Server 2014 リリースの機能の一部が提供されます。Microsoft SQL Server 2014 リリースとの違いは以下のとおりです。
- Office、.pdf を含むサードパーティ フィルターのインストールまたは使用をサポートしない。
- すべての構成はサービスによって管理され、お客様が FDHOST サービスの設定を管理することはできない。
- セマンティック検索、シソーラス、検索プロパティ リスト構文はまだ有効ではない。
Azure SQL Database フルテキスト検索と Azure Search の違い
Azure Search は Microsoft Azure が提供しているサービスの 1 つです。開発者はこのサービスを利用して、Web アプリケーションやモバイル アプリケーションに高度な検索機能を組み込むことができます。Azure SQL Database の Indexer (英語) を利用する場合は、Azure Search によって Azure SQL Database に格納されたデータを検索することができます。重要な点として、Azure Search は SQL Database だけでなく、さまざまなデータ ソースのデータをサポートします。データ検索のニーズに応じて、フルテキスト検索と Azure Search のいずれかをご利用ください。どちらが望ましいかは、検索対象の範囲、主となる機能、データの場所、拡張性、コストなどの条件によって変わってきます。以下の表を参考にしてください。
Azure SQL Database のフルテキスト検索 |
Azure Search |
|
データの場所 |
SQL Database 内に格納された文字ベースのデータに対してクエリを実行。 |
Azure SQL Database だけでなくあらゆるデータ ソースからデータを検索。 |
移行 |
オンプレミスのフルテキスト検索対応データベースから Azure SQL Database へ移行が可能。 |
該当なし |
拡張性とパフォーマンス |
フルテキスト検索の結果とトランザクション データを一緒に保持。たとえば、フルテキスト検索の結果と、他のテーブルやビューを連結できる。 |
パフォーマンスと拡張性の向上のため、検索ワークロードと OLTP ワークロードを隔離。 |
機能の違い |
機能が Azure SQL Database に統合されている。追加サービスによるコスト増を正当化できるほど頻繁には検索機能を使用しない場合に有効。 |
Web アプリケーションとモバイル アプリケーション向けの完全に管理された検索サービスとして提供されている。カスタムのスコアリング モデル、オート コンプリート機能、ファセット検索、検索ヒットの強調表示機能などにより、リッチな検索エクスペリエンスが実現される。 |
まとめ
大量のデータを管理するアプリケーションでデータを操作する方法として、検索機能は当たり前のものとなっています。Azure SQL Database に格納されたテキスト データを管理するアプリケーションにとって、データベース プラットフォームに統合された高速で堅牢な検索機能を提供するフルテキスト検索は、非常に付加価値が高いと言えます。