Begin;
Initialize;
InitializeSession  "TESTDB";
Command "create database TESTDB";
TerminateSession;
InitializeSession  "TESTDB";
Command "create table T(f1 nvarchar(200), f2 nvarchar(200), f3 int)";
Command "create fulltext index I_f2 on T(f2)";
Command "create  index I_f1 on T(f1)";
Command "insert T values (?,?,?),(?,?,?),(?,?,?),(?,?,?),(?,?,?),(?,?,?),(?,?,?),(?,?,?),(?,?,?),(?,?,?)" ["索引文字列の抽出手法 形態素解析 英文の場合は単語と単語の間にスペースが入るため、自然、スペースで区切られた文字列を抽出していけば、索引データの作成は容易となる。しかし日本語の場合は、単語をスペースで区切る「わかち書き」の習慣がないため、形態素解析技術を用いて、文脈の解析、単語分解を行い、それをもとにインデックスを作成する必要がある。形態素解析を行うためには解析用の辞書が必須であり、検索結果は辞書の品質に少なからず影響を受ける。また、辞書に登録されていないひらがな単語の抽出に難があるなど、技術的障壁も多く、検索漏れが生じることが欠点とされる。","データベース 出典: フリー百科事典『ウィキペディア（Wikipedia）』 データベース (Database) は、特定のテーマに沿ったデータを集めて管理し、容易に検索・抽出などの再利用をできるようにしたもの。 狭義には、コンピュータによって実現されたものを言う。OSが提供するファイルシステム上に直接構築されるものや、後述するデータベースマネージメントシステム (DBMS) を用いて構築されるものを含む。",2147483647,"N-Gram 「N文字インデックス法」「Nグラム法」などともいう。検索対象を単語単位ではなく一定のN文字単位で分解し、それの出現頻度を求める方法。Nの値が1なら「ユニグラム(uni-gram)」、2なら「バイグラム(bi-gram)」、3なら「トライグラム(tri-gram)」と呼ばれる。たとえば「全文検索技術」という文字列の場合、「全文」「文検」「検索」「索技」「技術」と2文字ずつ分割して索引化を行ってやれば、検索漏れが生じず、辞書の必要も無い。しかし形態素解析によるわかち書きに比べると、意図したものとは異なる検索結果（検索ノイズ＝「京都」で検索すると「東京都庁」がヒットするなど）が生じることが多く、インデックスのサイズも肥大化しがちであることが欠点とされる。","コンピュータ上では、データの再利用を高速かつ安定に実現するため、データを格納するための構造について様々な工夫が払われており、このデータ構造とアルゴリズムは情報工学において重要な研究分野のひとつである。",-2147483648,"全文検索 出典: フリー百科事典『ウィキペディア（Wikipedia）』 全文検索（ぜんぶんけんさく、Full text search）とは、コンピュータにおいて、複数の文書(ファイル)から特定の文字列を検索すること。「ファイル名検索」や「ファイル内文字列検索」と異なり、「複数文書にまたがって、文書に含まれる全文を検索する」という意味で使用される。","単純なファイルシステムには、ファイルシステム自体に「データ」を統一的手法で操作する機能はない。ファイルシステムでデータ管理をするためには、データの操作機能を「応用プログラム側」に持つしかない。データベースは、それを自ら持つことにより、応用プログラム側でデータの物理的格納状態を知らずとも操作でき、かつ、データの物理的格納状態に変更があった場合にも応用プログラム側の処理に影響が及ばないことを保障することがデータベースの前提条件となっている。(プログラムとデータの独立性)",0,"全文検索技術 grep型 順次走査検索、逐次検索とも。「grep」とはUnixにおける文字列検索コマンドであり、複数のテキストファイルの内容を順次走査していくことで、検索対象となる文字列を探し出す。一般に「grep型」と呼ばれる検索手法は、事前に索引ファイル（インデックス）を作成せず、ファイルを順次走査していくために、検索対象の増加に伴って検索速度が低下するのが特徴である。ちなみに「grep型」とは実際にgrepコマンドを使っているという意味ではないので注意のこと。","データベースをコンピュータ上で管理するためのシステム（Oracle Database、SQL Server、PostgreSQL、MySQL、SQLiteなど）をデータベースマネージメントシステム（DBMS）という。",1,"索引（インデックス）型 検索対象となる文書数が膨大な場合、grep型では検索を行うたびに1つ1つの文書にアクセスし、該当データを逐次検索するので、検索対象文書の増加に比例して、検索にかかる時間も長くなっていってしまう。そこであらかじめ検索対象となる文書群を走査しておき、高速な検索が可能になるような索引データを準備することで、検索時のパフォーマンスを向上させる手法が取られている。事前に索引ファイルを作成することをインデクシング(indexing)と呼ぶ。インデクシングにより生成されるデータはインデックス（インデクス）と呼ばれ、その構造は多くの場合、「文字列 | ファイルの場所 | ファイルの更新日 | 出現頻度・・・」といったようなリスト形式（テーブル構造)を取り、文字列が検索キーとなっている。検索時にはこのインデックスにアクセスすることで、劇的に高速な検索が可能となる。","データベース 出典: フリー百科事典『ウィキペディア（Wikipedia）』 データベース (Database) は、特定のテーマに沿ったデータを集めて管理し、容易に検索・抽出などの再利用をできるようにしたもの。 狭義には、コンピュータによって実現されたものを言う。OSが提供するファイルシステム上に直接構築されるものや、後述するデータベースマネージメントシステム (DBMS) を用いて構築されるものを含む。",-1,"索引文字列の抽出手法 形態素解析 英文の場合は単語と単語の間にスペースが入るため、自然、スペースで区切られた文字列を抽出していけば、索引データの作成は容易となる。しかし日本語の場合は、単語をスペースで区切る「わかち書き」の習慣がないため、形態素解析技術を用いて、文脈の解析、単語分解を行い、それをもとにインデックスを作成する必要がある。形態素解析を行うためには解析用の辞書が必須であり、検索結果は辞書の品質に少なからず影響を受ける。また、辞書に登録されていないひらがな単語の抽出に難があるなど、技術的障壁も多く、検索漏れが生じることが欠点とされる。","コンピュータ上では、データの再利用を高速かつ安定に実現するため、データを格納するための構造について様々な工夫が払われており、このデータ構造とアルゴリズムは情報工学において重要な研究分野のひとつである。",6543210,"N-Gram 「N文字インデックス法」「Nグラム法」などともいう。検索対象を単語単位ではなく一定のN文字単位で分解し、それの出現頻度を求める方法。Nの値が1なら「ユニグラム(uni-gram)」、2なら「バイグラム(bi-gram)」、3なら「トライグラム(tri-gram)」と呼ばれる。たとえば「全文検索技術」という文字列の場合、「全文」「文検」「検索」「索技」「技術」と2文字ずつ分割して索引化を行ってやれば、検索漏れが生じず、辞書の必要も無い。しかし形態素解析によるわかち書きに比べると、意図したものとは異なる検索結果（検索ノイズ＝「京都」で検索すると「東京都庁」がヒットするなど）が生じることが多く、インデックスのサイズも肥大化しがちであることが欠点とされる。","単純なファイルシステムには、ファイルシステム自体に「データ」を統一的手法で操作する機能はない。ファイルシステムでデータ管理をするためには、データの操作機能を「応用プログラム側」に持つしかない。データベースは、それを自ら持つことにより、応用プログラム側でデータの物理的格納状態を知らずとも操作でき、かつ、データの物理的格納状態に変更があった場合にも応用プログラム側の処理に影響が及ばないことを保障することがデータベースの前提条件となっている。(プログラムとデータの独立性)",-34567890,"全文検索 出典: フリー百科事典『ウィキペディア（Wikipedia）』 全文検索（ぜんぶんけんさく、Full text search）とは、コンピュータにおいて、複数の文書(ファイル)から特定の文字列を検索すること。「ファイル名検索」や「ファイル内文字列検索」と異なり、「複数文書にまたがって、文書に含まれる全文を検索する」という意味で使用される。","データベースをコンピュータ上で管理するためのシステム（Oracle Database、SQL Server、PostgreSQL、MySQL、SQLiteなど）をデータベースマネージメントシステム（DBMS）という。",2147483647,"全文検索技術 grep型 順次走査検索、逐次検索とも。「grep」とはUnixにおける文字列検索コマンドであり、複数のテキストファイルの内容を順次走査していくことで、検索対象となる文字列を探し出す。一般に「grep型」と呼ばれる検索手法は、事前に索引ファイル（インデックス）を作成せず、ファイルを順次走査していくために、検索対象の増加に伴って検索速度が低下するのが特徴である。ちなみに「grep型」とは実際にgrepコマンドを使っているという意味ではないので注意のこと。","データベース 出典: フリー百科事典『ウィキペディア（Wikipedia）』 データベース (Database) は、特定のテーマに沿ったデータを集めて管理し、容易に検索・抽出などの再利用をできるようにしたもの。 狭義には、コンピュータによって実現されたものを言う。OSが提供するファイルシステム上に直接構築されるものや、後述するデータベースマネージメントシステム (DBMS) を用いて構築されるものを含む。",-2147483648,"索引（インデックス）型 検索対象となる文書数が膨大な場合、grep型では検索を行うたびに1つ1つの文書にアクセスし、該当データを逐次検索するので、検索対象文書の増加に比例して、検索にかかる時間も長くなっていってしまう。そこであらかじめ検索対象となる文書群を走査しておき、高速な検索が可能になるような索引データを準備することで、検索時のパフォーマンスを向上させる手法が取られている。事前に索引ファイルを作成することをインデクシング(indexing)と呼ぶ。インデクシングにより生成されるデータはインデックス（インデクス）と呼ばれ、その構造は多くの場合、「文字列 | ファイルの場所 | ファイルの更新日 | 出現頻度・・・」といったようなリスト形式（テーブル構造)を取り、文字列が検索キーとなっている。検索時にはこのインデックスにアクセスすることで、劇的に高速な検索が可能となる。","コンピュータ上では、データの再利用を高速かつ安定に実現するため、データを格納するための構造について様々な工夫が払われており、このデータ構造とアルゴリズムは情報工学において重要な研究分野のひとつである。",0];
CreatePreparedCommand "sel1" "select * from T where f1 like ?";
PreparedCommand "sel1" ["%全文検索%"];
PreparedCommand "sel1" ["%全文検索%"];
Command "start transaction read write";
PreparedCommand "sel1" ["%全文検索%"];
Command "commit";
ErasePreparedCommand "sel1";
CreatePreparedCommand "sel2" "select * from T where f2 like 'データベース%'  language 'ja' or f3 > 0 limit 1";
PreparedCommand "sel2" [];
PreparedCommand "sel2" [];
Command "start transaction read write";
PreparedCommand "sel2" [];
Command "commit";
ErasePreparedCommand "sel2";
CreatePreparedCommand "sel3" "select * from T where not(f1 like '全文検索%'  escape '*') limit 1";
PreparedCommand "sel3" [];
PreparedCommand "sel3" [];
Command "start transaction read write";
PreparedCommand "sel3" [];
Command "commit";
ErasePreparedCommand "sel3";
CreatePreparedCommand "sel4" "select * from T where f2 like ?  escape '*' language 'ja'";
PreparedCommand "sel4" ["データベース%"];
PreparedCommand "sel4" ["データベース%"];
Command "start transaction read write";
PreparedCommand "sel4" ["データベース%"];
Command "commit";
ErasePreparedCommand "sel4";
CreatePreparedCommand "sel5" "select * from T where f1 like '%全文検索%'  escape ? language ? or f3 > 0";
PreparedCommand "sel5" ["*","ja"];
PreparedCommand "sel5" ["*","ja"];
Command "start transaction read write";
PreparedCommand "sel5" ["*","ja"];
Command "commit";
ErasePreparedCommand "sel5";
CreatePreparedCommand "sel6" "select * from T where not(f2 like '%データベース%'  escape ?) limit 1";
PreparedCommand "sel6" ["*"];
PreparedCommand "sel6" ["*"];
Command "start transaction read write";
PreparedCommand "sel6" ["*"];
Command "commit";
ErasePreparedCommand "sel6";
CreatePreparedCommand "sel7" "select * from T where not(f2 like ?  language ?) limit 1";
PreparedCommand "sel7" ["%データベース%","ja"];
PreparedCommand "sel7" ["%データベース%","ja"];
Command "start transaction read write";
PreparedCommand "sel7" ["%データベース%","ja"];
Command "commit";
ErasePreparedCommand "sel7";
CreatePreparedCommand "sel8" "select * from T where f1 like '%全文検索%'  escape '*' language 'ja' limit 1";
PreparedCommand "sel8" [];
PreparedCommand "sel8" [];
Command "start transaction read write";
PreparedCommand "sel8" [];
Command "commit";
ErasePreparedCommand "sel8";
CreatePreparedCommand "sel9" "select * from T where not(f1 like '全文検索%'  escape ? language 'ja')";
PreparedCommand "sel9" ["*"];
PreparedCommand "sel9" ["*"];
Command "start transaction read write";
PreparedCommand "sel9" ["*"];
Command "commit";
ErasePreparedCommand "sel9";
CreatePreparedCommand "sel10" "select * from T where f2 like 'データベース%'  escape '*' language ?";
PreparedCommand "sel10" ["ja"];
PreparedCommand "sel10" ["ja"];
Command "start transaction read write";
PreparedCommand "sel10" ["ja"];
Command "commit";
ErasePreparedCommand "sel10";
CreatePreparedCommand "sel11" "select * from T where f2 like ?  escape ? or f3 > 0 limit 1";
PreparedCommand "sel11" ["%データベース%","*"];
PreparedCommand "sel11" ["%データベース%","*"];
Command "start transaction read write";
PreparedCommand "sel11" ["%データベース%","*"];
Command "commit";
ErasePreparedCommand "sel11";
CreatePreparedCommand "sel12" "select * from T where f1 like '%全文検索%'  language ? or f3 > 0";
PreparedCommand "sel12" ["ja"];
PreparedCommand "sel12" ["ja"];
Command "start transaction read write";
PreparedCommand "sel12" ["ja"];
Command "commit";
ErasePreparedCommand "sel12";
CreatePreparedCommand "sel13" "select * from T where f2 like '%データベース%'  escape '*' or f3 > 0";
PreparedCommand "sel13" [];
PreparedCommand "sel13" [];
Command "start transaction read write";
PreparedCommand "sel13" [];
Command "commit";
ErasePreparedCommand "sel13";
CreatePreparedCommand "sel14" "select * from T where f1 like ?  escape ? language ? limit 1";
PreparedCommand "sel14" ["全文検索%","*","ja"];
PreparedCommand "sel14" ["全文検索%","*","ja"];
Command "start transaction read write";
PreparedCommand "sel14" ["全文検索%","*","ja"];
Command "commit";
ErasePreparedCommand "sel14";
Command "drop table T";
TerminateSession;
InitializeSession  "TESTDB";
Command "drop database TESTDB";
TerminateSession;
Terminate;
End;
