Build 2015 で発表されましたシリーズのフルテキスト検索のプレビューを触ってみたいと思います。
詳細については以下を参照されるとよいかと。
Full-Text Search is now available for preview in Azure SQL Database
Full-Text Search
SSMS については 2014 に最新の更新プログラムを適用したものを使用するとよいかと思います。
最新のものであれば、以下のように SQL Database にストレージが表示され、フルテキスト系の情報を確認することができます。
それでは、冒頭で紹介した内容に沿って検証してみたいと思います。
最初に、フルテキストカタログを作成します。
CREATE FULLTEXT CATALOG ftCatalog AS DEFAULT;
これにより、フルテキストカタログが作成されます。
次にフルテキストインデックスを作成するためのテストテーブルを作成します。
CREATE TABLE ftTest (Col1 int IDENTITY, Col2 nvarchar(max)) INSERT INTO ftTest(Col2) VALUES(N'えろす(えろす師匠 / @ichi_sien)は激怒した。必ず、かの邪知暴虐の縄の王を除かなければならぬと決意した。えろすの本名は誰にもわからぬ。えろすは、財閥の総帥である。寄席を開き、快楽亭として暮らしてきた。けれども放ったオオアリクイの動向に対しては、人一倍に敏感であった。') CREATE UNIQUE INDEX ui_ftTest ON ftTest(Col1);
テストデータの作成が終了したらフルテキストインデックスを作成し、有効にします。
CREATE FULLTEXT INDEX ON ftTest(Col2) KEY INDEX ui_ftTest ON ftCatalog; ALTER FULLTEXT INDEX ON ftTest ENABLE; ALTER FULLTEXT INDEX ON ftTest START FULL POPULATION;
作成が終わったらインデックスの作成状況を確認してみます。
SELECT * FROM sys.dm_fts_index_population SELECT * FROM sys.dm_fts_index_keywords( DB_ID(), OBJECT_ID('ftTest')) SELECT * FROM sys.dm_fts_index_keywords_by_document ( DB_ID(), OBJECT_ID('ftTest'))
フルテキストインデックスが登録されていることが確認できますね。
これで以下のようなクエリで検索ができます。
SELECT * FROM ftTest WHERE CONTAINS (Col2, 'ichi_sien')
登録済のフィルターは
sp_help_fulltext_system_components 'all'
で確認ができ、Office 系のフィルターも登録がされているみたいではありましたが、現状は
No support for installation or use of third party filters, including Office and .pdf.
とのことでしたので、バイナリ系の検索はファイルが限られそうです。
ひとまずバイナリについても試してみたいと思います。
まずは、以下のテーブルを作成して、
CREATE TABLE ftTest2 (Col1 int IDENTITY, Col2 nvarchar(10), Col3 varbinary(max)) CREATE UNIQUE INDEX ui_ftTest2 ON ftTest2(Col1);
以下のような形で、ファイルをアップロードします。
$connectionstring = "server=<サーバー名>.database.windows.net;User ID=<ログイン名>;password=<パスワード>;Initial Catalog=FTTEST; Encrypt=true” $conn = new-object System.Data.SqlClient.SqlConnection($connectionstring) $conn.Open() $cmd = New-Object System.Data.SqlClient.SqlCommand $cmd.Connection = $conn $cmd.CommandText = "INSERT INTO ftTest2 (Col2, Col3) VALUES (@param1, @param2)" [Byte[]]$file = get-content -Encoding Byte c:\Temp\test.txt $cmd.Parameters.Add("@param1",".txt") $cmd.Parameters.Add("@param2", $file) $cmd.ExecuteNonQuery() $conn.Close()
終了したらカタログを作成します。
CREATE FULLTEXT INDEX ON ftTest2 KEY INDEX ui_ftTest2 ON ftCatalog ALTER FULLTEXT INDEX ON ftTest2 ADD ([col3] TYPE COLUMN [col2] LANGUAGE [Japanese]) ALTER FULLTEXT INDEX ON ftTest2 ENABLE; ALTER FULLTEXT INDEX ON ftTest2 START FULL POPULATION;
Unicode で保存されているテキストであれば、フルテキスト検索の対象とできていますね。
SELECT * FROM sys.dm_fts_index_keywords( DB_ID(), OBJECT_ID('ftTest2')) SELECT * FROM sys.dm_fts_index_keywords_by_document ( DB_ID(), OBJECT_ID('ftTest2'))
LoadOSResources (load_os_resources) が有効になっていないようですので、Office 系のフィルターを使用してのフルテキスト検索ができないのでしょうかね。
SELECT FULLTEXTSERVICEPROPERTY ('LoadOSResources')
Office 系のファイルのフルテキスト検索ぐらいは実施したいものですね。
[…] フルテキスト検索 […]
Azure SQl Database の新機能履歴 - 蒼の王座
9 10月 15 at 02:21