SQL Server にワードやPDF、パワーポイントデータを格納し、フルテキストインデックスを作成し全文検索したいという要望があるときに読んでください。文章の例は SQL Server 2008 です。
■テーブルを作成する。
WORDやEXCELを格納するフィールドを作る。以下の属性にする。
varbinary(MAX)
データ型を格納するフィールドを作る。以下の属性にする。
varchar(20)
格納するデータはファイルの拡張子なので、サイズが20もなくて十分であればもっと少なくする。
フィールドに格納する書類等を文字として抽出するには「IFilter」を用いることになるので、書類等の分類として拡張子を入れ込むフィールドも必要になる。その列を「データ型列」と言う。
実際にデータを投入するときは
varbinary(MAX) ← Document.doc(バイナリオブジェクトとして)
varchar(20) ← .doc
のようにすることで、IFilterはWORD文書であることを認識し、文書を文字化する。つまり、プログラムを組むときは自動的に拡張子を分離し、データ型列のデータとして格納することになる。
変数に文章を格納するときは、以下のような感じで。(例ではActiveX Data Objectの参照設定が必要)
Dim FILE_IMAGE() As Byte
Dim adoStream As ADODB.Stream
Dim FILE_SPEC=”C:\FOLDER\DOCUMENT.docx”
adoStream = New ADODB.Stream
adoStream.Type = ADODB.StreamTypeEnum.adTypeBinary
adoStream.Open()
adoStream.LoadFromFile(FILE_SPEC)
FILE_IMAGE = adoStream.Read
adoStream.Close()
■フルテキストインデックスの定義
SQL Server のstudioで「フルテキストの定義」を実行すれば作成されるが、ビューテーブルの場合や複雑な式はT-SQLでクエリを作成しなければならないことがある。
フルテキスト インデックス作成ウィザードの使用
■フィルターの定義。
以下のプログラム(各社から提供されているフィルター)をネットから探してインストールする。(64ビットOSの場合)
FilterPack64bit.exe
office-kb2124512-fullfile-x64-glb.exe
PDFFilter64Setup.msi
サーバーの環境設定(PATH)に以下を追加する。
C:\Program Files\Adobe\Adobe PDF iFilter 11 for 64-bit platforms\bin\
以上を設定したら再起動。
■IFilerを定義する
studioのクエリで以下を実行する。細かいことはコマンドをネットで検索して説明を読むこと。要はフィルター定義を読み込み、証明されていなくとも読み込むこととし、更新し、プロセスを再起動し、設定を強制上書き。その後に設定されたリストを表示する。
EXEC sp_fulltext_service @action='load_os_resources', @value=1;
EXEC sp_fulltext_service 'verify_signature', 0;
EXEC sp_fulltext_service 'update_languages';
EXEC sp_fulltext_service 'restart_all_fdhosts';
reconfigure with override;
go
SELECT * FROM sys.fulltext_document_types ;
SELECT * FROM sys.fulltext_languages;
EXEC sp_help_fulltext_system_components 'filter';
エラーがなければリストが画面に表示される。
■その他
カタログの再構築はstudioのストレージ、フルテキストカタログの中にあるカタログを右クリックして再構築。
ビューをフルテキストインデックス化する際は、変更のたびに再構築。