SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Database のフルテキスト検索 (プレビュー) を触ってみる

one comment

Build 2015 で発表されましたシリーズのフルテキスト検索のプレビューを触ってみたいと思います。

詳細については以下を参照されるとよいかと。
Full-Text Search is now available for preview in Azure SQL Database
Full-Text Search

SSMS については 2014 に最新の更新プログラムを適用したものを使用するとよいかと思います。
最新のものであれば、以下のように SQL Database にストレージが表示され、フルテキスト系の情報を確認することができます。
image

 

それでは、冒頭で紹介した内容に沿って検証してみたいと思います。

最初に、フルテキストカタログを作成します。

CREATE FULLTEXT CATALOG ftCatalog AS DEFAULT;

これにより、フルテキストカタログが作成されます。

image

次にフルテキストインデックスを作成するためのテストテーブルを作成します。

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'))

 

フルテキストインデックスが登録されていることが確認できますね。

image

これで以下のようなクエリで検索ができます。

SELECT * FROM ftTest WHERE CONTAINS (Col2, 'ichi_sien')

image

登録済のフィルターは

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'))

image

LoadOSResources (load_os_resources) が有効になっていないようですので、Office 系のフィルターを使用してのフルテキスト検索ができないのでしょうかね。

SELECT FULLTEXTSERVICEPROPERTY ('LoadOSResources')

Office 系のファイルのフルテキスト検索ぐらいは実施したいものですね。

Share

Written by Masayuki.Ozawa

5月 4th, 2015 at 12:34 am

Posted in SQL Database

Tagged with

One Response to 'SQL Database のフルテキスト検索 (プレビュー) を触ってみる'

Subscribe to comments with RSS or TrackBack to 'SQL Database のフルテキスト検索 (プレビュー) を触ってみる'.

  1. […] フルテキスト検索 […]

Leave a Reply