Begin;
Initialize;
InitializeSession  "TESTDB";
Command "create database TESTDB";
TerminateSession;
InitializeSession  "TESTDB";
Command "create table T(f1 nvarchar(200), f2 int, f3 float)";
Command "create fulltext index I_f1 on T(f1) score column f3 hint 'delayed'";
Command "create  index I_f2 on T(f2)";
Command "insert T values (?,?,?),(?,?,?),(?,?,?),(?,?,?),(?,?,?),(?,?,?),(?,?,?),(?,?,?),(?,?,?),(?,?,?)" ["索引文字列の抽出手法 形態素解析 英文の場合は単語と単語の間にスペースが入るため、自然、スペースで区切られた文字列を抽出していけば、索引データの作成は容易となる。しかし日本語の場合は、単語をスペースで区切る「わかち書き」の習慣がないため、形態素解析技術を用いて、文脈の解析、単語分解を行い、それをもとにインデックスを作成する必要がある。形態素解析を行うためには解析用の辞書が必須であり、検索結果は辞書の品質に少なからず影響を受ける。また、辞書に登録されていないひらがな単語の抽出に難があるなど、技術的障壁も多く、検索漏れが生じることが欠点とされる。",-34567890,"2.22507385850721E-308","N-Gram 「N文字インデックス法」「Nグラム法」などともいう。検索対象を単語単位ではなく一定のN文字単位で分解し、それの出現頻度を求める方法。Nの値が1なら「ユニグラム(uni-gram)」、2なら「バイグラム(bi-gram)」、3なら「トライグラム(tri-gram)」と呼ばれる。たとえば「全文検索技術」という文字列の場合、「全文」「文検」「検索」「索技」「技術」と2文字ずつ分割して索引化を行ってやれば、検索漏れが生じず、辞書の必要も無い。しかし形態素解析によるわかち書きに比べると、意図したものとは異なる検索結果（検索ノイズ＝「京都」で検索すると「東京都庁」がヒットするなど）が生じることが多く、インデックスのサイズも肥大化しがちであることが欠点とされる。",2147483647,"-2.22507385850721E-308","全文検索 出典: フリー百科事典『ウィキペディア（Wikipedia）』 全文検索（ぜんぶんけんさく、Full text search）とは、コンピュータにおいて、複数の文書(ファイル)から特定の文字列を検索すること。「ファイル名検索」や「ファイル内文字列検索」と異なり、「複数文書にまたがって、文書に含まれる全文を検索する」という意味で使用される。",-2147483648,"0","全文検索技術 grep型 順次走査検索、逐次検索とも。「grep」とはUnixにおける文字列検索コマンドであり、複数のテキストファイルの内容を順次走査していくことで、検索対象となる文字列を探し出す。一般に「grep型」と呼ばれる検索手法は、事前に索引ファイル（インデックス）を作成せず、ファイルを順次走査していくために、検索対象の増加に伴って検索速度が低下するのが特徴である。ちなみに「grep型」とは実際にgrepコマンドを使っているという意味ではないので注意のこと。",0,"3.141592","索引（インデックス）型 検索対象となる文書数が膨大な場合、grep型では検索を行うたびに1つ1つの文書にアクセスし、該当データを逐次検索するので、検索対象文書の増加に比例して、検索にかかる時間も長くなっていってしまう。そこであらかじめ検索対象となる文書群を走査しておき、高速な検索が可能になるような索引データを準備することで、検索時のパフォーマンスを向上させる手法が取られている。事前に索引ファイルを作成することをインデクシング(indexing)と呼ぶ。インデクシングにより生成されるデータはインデックス（インデクス）と呼ばれ、その構造は多くの場合、「文字列 | ファイルの場所 | ファイルの更新日 | 出現頻度・・・」といったようなリスト形式（テーブル構造)を取り、文字列が検索キーとなっている。検索時にはこのインデックスにアクセスすることで、劇的に高速な検索が可能となる。",1,"3.776E3","索引文字列の抽出手法 形態素解析 英文の場合は単語と単語の間にスペースが入るため、自然、スペースで区切られた文字列を抽出していけば、索引データの作成は容易となる。しかし日本語の場合は、単語をスペースで区切る「わかち書き」の習慣がないため、形態素解析技術を用いて、文脈の解析、単語分解を行い、それをもとにインデックスを作成する必要がある。形態素解析を行うためには解析用の辞書が必須であり、検索結果は辞書の品質に少なからず影響を受ける。また、辞書に登録されていないひらがな単語の抽出に難があるなど、技術的障壁も多く、検索漏れが生じることが欠点とされる。",-1,"1.79769313486231E308","N-Gram 「N文字インデックス法」「Nグラム法」などともいう。検索対象を単語単位ではなく一定のN文字単位で分解し、それの出現頻度を求める方法。Nの値が1なら「ユニグラム(uni-gram)」、2なら「バイグラム(bi-gram)」、3なら「トライグラム(tri-gram)」と呼ばれる。たとえば「全文検索技術」という文字列の場合、「全文」「文検」「検索」「索技」「技術」と2文字ずつ分割して索引化を行ってやれば、検索漏れが生じず、辞書の必要も無い。しかし形態素解析によるわかち書きに比べると、意図したものとは異なる検索結果（検索ノイズ＝「京都」で検索すると「東京都庁」がヒットするなど）が生じることが多く、インデックスのサイズも肥大化しがちであることが欠点とされる。",6543210,"-1.79769313486231E308","全文検索 出典: フリー百科事典『ウィキペディア（Wikipedia）』 全文検索（ぜんぶんけんさく、Full text search）とは、コンピュータにおいて、複数の文書(ファイル)から特定の文字列を検索すること。「ファイル名検索」や「ファイル内文字列検索」と異なり、「複数文書にまたがって、文書に含まれる全文を検索する」という意味で使用される。",-34567890,"2.22507385850721E-308","全文検索技術 grep型 順次走査検索、逐次検索とも。「grep」とはUnixにおける文字列検索コマンドであり、複数のテキストファイルの内容を順次走査していくことで、検索対象となる文字列を探し出す。一般に「grep型」と呼ばれる検索手法は、事前に索引ファイル（インデックス）を作成せず、ファイルを順次走査していくために、検索対象の増加に伴って検索速度が低下するのが特徴である。ちなみに「grep型」とは実際にgrepコマンドを使っているという意味ではないので注意のこと。",2147483647,"-2.22507385850721E-308","索引（インデックス）型 検索対象となる文書数が膨大な場合、grep型では検索を行うたびに1つ1つの文書にアクセスし、該当データを逐次検索するので、検索対象文書の増加に比例して、検索にかかる時間も長くなっていってしまう。そこであらかじめ検索対象となる文書群を走査しておき、高速な検索が可能になるような索引データを準備することで、検索時のパフォーマンスを向上させる手法が取られている。事前に索引ファイルを作成することをインデクシング(indexing)と呼ぶ。インデクシングにより生成されるデータはインデックス（インデクス）と呼ばれ、その構造は多くの場合、「文字列 | ファイルの場所 | ファイルの更新日 | 出現頻度・・・」といったようなリスト形式（テーブル構造)を取り、文字列が検索キーとなっている。検索時にはこのインデックスにアクセスすることで、劇的に高速な検索が可能となる。",-2147483648,"0"];
CreatePreparedCommand "sel1" "select * from T where f1 contains ?";
PreparedCommand "sel1" ["全文検索"];
PreparedCommand "sel1" ["全文検索"];
Command "start transaction read write";
PreparedCommand "sel1" ["全文検索"];
Command "commit";
ErasePreparedCommand "sel1";
CreatePreparedCommand "sel2" "select * from T where f1 contains ? calculator 'TfIdf' average length 120 df 10 score function 'Sum' expand (from (select f1 from T where f2 > 0 limit 10)) extractor 'EstimateDf' 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 contains '全文検索' average length 120 df ? score function ? expand (from (select f1 from T where f2 > ? limit 10)) extractor ?)";
PreparedCommand "sel3" [10,"Sum",0,"EstimateDf"];
PreparedCommand "sel3" [10,"Sum",0,"EstimateDf"];
Command "start transaction read write";
PreparedCommand "sel3" [10,"Sum",0,"EstimateDf"];
Command "commit";
ErasePreparedCommand "sel3";
CreatePreparedCommand "sel4" "select * from T where f1 contains '全文検索' calculator 'TfIdf' score function 'Sum' extractor ? or f3 > 0 limit 1";
PreparedCommand "sel4" ["EstimateDf"];
PreparedCommand "sel4" ["EstimateDf"];
Command "start transaction read write";
PreparedCommand "sel4" ["EstimateDf"];
Command "commit";
ErasePreparedCommand "sel4";
CreatePreparedCommand "sel5" "select * from T where f1 contains freetext(?) average length ? df 10 expand (from (select f1 from T where f2 > ? limit 10)) extractor 'EstimateDf' limit 1";
PreparedCommand "sel5" ["全文検索の最新動向",120,0];
PreparedCommand "sel5" ["全文検索の最新動向",120,0];
Command "start transaction read write";
PreparedCommand "sel5" ["全文検索の最新動向",120,0];
Command "commit";
ErasePreparedCommand "sel5";
CreatePreparedCommand "sel6" "select * from T where not(f1 contains freetext(?) calculator 'TfIdf' average length ? df ? score function ? expand (from (select f1 from T where f2 > 0 limit 10)))";
PreparedCommand "sel6" ["全文検索の最新動向",120,10,"Sum"];
PreparedCommand "sel6" ["全文検索の最新動向",120,10,"Sum"];
Command "start transaction read write";
PreparedCommand "sel6" ["全文検索の最新動向",120,10,"Sum"];
Command "commit";
ErasePreparedCommand "sel6";
CreatePreparedCommand "sel7" "select * from T where not(f1 contains freetext('全文検索の最新動向') calculator ? df 10 score function ? extractor 'EstimateDf')";
PreparedCommand "sel7" ["TfIdf","Sum"];
PreparedCommand "sel7" ["TfIdf","Sum"];
Command "start transaction read write";
PreparedCommand "sel7" ["TfIdf","Sum"];
Command "commit";
ErasePreparedCommand "sel7";
CreatePreparedCommand "sel8" "select * from T where f1 contains freetext('全文検索の最新動向') calculator ? average length 120 expand (from (select f1 from T where f2 > 0 limit 10)) or f3 > 0 limit 1";
PreparedCommand "sel8" ["TfIdf"];
PreparedCommand "sel8" ["TfIdf"];
Command "start transaction read write";
PreparedCommand "sel8" ["TfIdf"];
Command "commit";
ErasePreparedCommand "sel8";
CreatePreparedCommand "sel9" "select * from T where f1 contains wordlist('索引','ファイル') calculator ? average length ? df ? score function 'Sum' expand (from (select f1 from T where f2 > ? limit 10)) extractor ?";
PreparedCommand "sel9" ["TfIdf",120,10,0,"EstimateDf"];
PreparedCommand "sel9" ["TfIdf",120,10,0,"EstimateDf"];
Command "start transaction read write";
PreparedCommand "sel9" ["TfIdf",120,10,0,"EstimateDf"];
Command "commit";
ErasePreparedCommand "sel9";
CreatePreparedCommand "sel10" "select * from T where f1 contains wordlist('索引','ファイル') df ? expand (from (select f1 from T where f2 > 0 limit 10)) extractor 'EstimateDf' or f3 > 0 limit 1";
PreparedCommand "sel10" [10];
PreparedCommand "sel10" [10];
Command "start transaction read write";
PreparedCommand "sel10" [10];
Command "commit";
ErasePreparedCommand "sel10";
CreatePreparedCommand "sel11" "select * from T where f1 contains wordlist(?,'ファイル') calculator 'TfIdf' average length ? score function ? expand (from (select f1 from T where f2 > ? limit 10)) extractor 'EstimateDf' or f3 > 0";
PreparedCommand "sel11" ["索引",120,"Sum",0];
PreparedCommand "sel11" ["索引",120,"Sum",0];
Command "start transaction read write";
PreparedCommand "sel11" ["索引",120,"Sum",0];
Command "commit";
ErasePreparedCommand "sel11";
CreatePreparedCommand "sel12" "select * from T where not(f1 contains wordlist(?,'ファイル') average length 120 df 10 score function 'Sum') limit 1";
PreparedCommand "sel12" ["索引"];
PreparedCommand "sel12" ["索引"];
Command "start transaction read write";
PreparedCommand "sel12" ["索引"];
Command "commit";
ErasePreparedCommand "sel12";
CreatePreparedCommand "sel13" "select * from T where f1 contains wordlist(?,'ファイル') calculator 'TfIdf' average length 120 df ? expand (from (select f1 from T where f2 > 0 limit 10)) extractor ?";
PreparedCommand "sel13" ["索引",10,"EstimateDf"];
PreparedCommand "sel13" ["索引",10,"EstimateDf"];
Command "start transaction read write";
PreparedCommand "sel13" ["索引",10,"EstimateDf"];
Command "commit";
ErasePreparedCommand "sel13";
CreatePreparedCommand "sel14" "select * from T where f1 contains wordlist(?,'ファイル') calculator ? average length ? df 10 score function ? expand (from (select f1 from T where f2 > ? limit 10)) or f3 > 0 limit 1";
PreparedCommand "sel14" ["索引","TfIdf",120,"Sum",0];
PreparedCommand "sel14" ["索引","TfIdf",120,"Sum",0];
Command "start transaction read write";
PreparedCommand "sel14" ["索引","TfIdf",120,"Sum",0];
Command "commit";
ErasePreparedCommand "sel14";
CreatePreparedCommand "sel15" "select * from T where f1 contains wordlist('索引',?) average length ? score function ? extractor ? limit 1";
PreparedCommand "sel15" ["ファイル",120,"Sum","EstimateDf"];
PreparedCommand "sel15" ["ファイル",120,"Sum","EstimateDf"];
Command "start transaction read write";
PreparedCommand "sel15" ["ファイル",120,"Sum","EstimateDf"];
Command "commit";
ErasePreparedCommand "sel15";
CreatePreparedCommand "sel16" "select * from T where not(f1 contains wordlist('索引',?) calculator 'TfIdf' df 10 expand (from (select f1 from T where f2 > ? limit 10)) extractor ?)";
PreparedCommand "sel16" ["ファイル",0,"EstimateDf"];
PreparedCommand "sel16" ["ファイル",0,"EstimateDf"];
Command "start transaction read write";
PreparedCommand "sel16" ["ファイル",0,"EstimateDf"];
Command "commit";
ErasePreparedCommand "sel16";
CreatePreparedCommand "sel17" "select * from T where f1 contains wordlist(?,'ファイル') calculator ? df ? score function 'Sum' limit 1";
PreparedCommand "sel17" ["索引","TfIdf",10];
PreparedCommand "sel17" ["索引","TfIdf",10];
Command "start transaction read write";
PreparedCommand "sel17" ["索引","TfIdf",10];
Command "commit";
ErasePreparedCommand "sel17";
CreatePreparedCommand "sel18" "select * from T where not(f1 contains wordlist(?,'ファイル') average length 120 score function ? expand (from (select f1 from T where f2 > 0 limit 10)) extractor 'EstimateDf')";
PreparedCommand "sel18" ["索引","Sum"];
PreparedCommand "sel18" ["索引","Sum"];
Command "start transaction read write";
PreparedCommand "sel18" ["索引","Sum"];
Command "commit";
ErasePreparedCommand "sel18";
CreatePreparedCommand "sel19" "select * from T where not(f1 contains ? calculator ? average length ? df ? score function ? expand (from (select f1 from T where f2 > ? limit 10)) extractor ?) limit 1";
PreparedCommand "sel19" ["全文検索","TfIdf",120,10,"Sum",0,"EstimateDf"];
PreparedCommand "sel19" ["全文検索","TfIdf",120,10,"Sum",0,"EstimateDf"];
Command "start transaction read write";
PreparedCommand "sel19" ["全文検索","TfIdf",120,10,"Sum",0,"EstimateDf"];
Command "commit";
ErasePreparedCommand "sel19";
CreatePreparedCommand "sel20" "select * from T where f1 contains '全文検索' calculator ? average length ? df 10 expand (from (select f1 from T where f2 > 0 limit 10)) extractor 'EstimateDf'";
PreparedCommand "sel20" ["TfIdf",120];
PreparedCommand "sel20" ["TfIdf",120];
Command "start transaction read write";
PreparedCommand "sel20" ["TfIdf",120];
Command "commit";
ErasePreparedCommand "sel20";
CreatePreparedCommand "sel21" "select * from T where f1 contains freetext(?) calculator ? average length 120 score function 'Sum' extractor ? or f3 > 0";
PreparedCommand "sel21" ["全文検索の最新動向","TfIdf","EstimateDf"];
PreparedCommand "sel21" ["全文検索の最新動向","TfIdf","EstimateDf"];
Command "start transaction read write";
PreparedCommand "sel21" ["全文検索の最新動向","TfIdf","EstimateDf"];
Command "commit";
ErasePreparedCommand "sel21";
CreatePreparedCommand "sel22" "select * from T where f1 contains freetext('全文検索の最新動向') calculator 'TfIdf' average length ? df ? score function 'Sum' expand (from (select f1 from T where f2 > ? limit 10)) extractor ? limit 1";
PreparedCommand "sel22" [120,10,0,"EstimateDf"];
PreparedCommand "sel22" [120,10,0,"EstimateDf"];
Command "start transaction read write";
PreparedCommand "sel22" [120,10,0,"EstimateDf"];
Command "commit";
ErasePreparedCommand "sel22";
CreatePreparedCommand "sel23" "select * from T where not(f1 contains wordlist('索引','ファイル') calculator 'TfIdf' average length 120 score function ?) limit 1";
PreparedCommand "sel23" ["Sum"];
PreparedCommand "sel23" ["Sum"];
Command "start transaction read write";
PreparedCommand "sel23" ["Sum"];
Command "commit";
ErasePreparedCommand "sel23";
CreatePreparedCommand "sel24" "select * from T where f1 contains wordlist(?,'ファイル') calculator ? df ? expand (from (select f1 from T where f2 > 0 limit 10)) extractor ? limit 1";
PreparedCommand "sel24" ["索引","TfIdf",10,"EstimateDf"];
PreparedCommand "sel24" ["索引","TfIdf",10,"EstimateDf"];
Command "start transaction read write";
PreparedCommand "sel24" ["索引","TfIdf",10,"EstimateDf"];
Command "commit";
ErasePreparedCommand "sel24";
CreatePreparedCommand "sel25" "select * from T where not(f1 contains wordlist(?,'ファイル') score function 'Sum' extractor 'EstimateDf')";
PreparedCommand "sel25" ["索引"];
PreparedCommand "sel25" ["索引"];
Command "start transaction read write";
PreparedCommand "sel25" ["索引"];
Command "commit";
ErasePreparedCommand "sel25";
CreatePreparedCommand "sel26" "select * from T where f1 contains wordlist('索引',?) calculator ? average length 120 df ? score function 'Sum' expand (from (select f1 from T where f2 > 0 limit 10)) extractor 'EstimateDf' or f3 > 0";
PreparedCommand "sel26" ["ファイル","TfIdf",10];
PreparedCommand "sel26" ["ファイル","TfIdf",10];
Command "start transaction read write";
PreparedCommand "sel26" ["ファイル","TfIdf",10];
Command "commit";
ErasePreparedCommand "sel26";
CreatePreparedCommand "sel27" "select * from T where f1 contains wordlist(?,'ファイル') calculator 'TfIdf' average length ? df 10 expand (from (select f1 from T where f2 > ? limit 10)) extractor ? or f3 > 0";
PreparedCommand "sel27" ["索引",120,0,"EstimateDf"];
PreparedCommand "sel27" ["索引",120,0,"EstimateDf"];
Command "start transaction read write";
PreparedCommand "sel27" ["索引",120,0,"EstimateDf"];
Command "commit";
ErasePreparedCommand "sel27";
CreatePreparedCommand "sel28" "select * from T where f1 contains '全文検索' df ? score function ? expand (from (select f1 from T where f2 > ? limit 10)) or f3 > 0 limit 1";
PreparedCommand "sel28" [10,"Sum",0];
PreparedCommand "sel28" [10,"Sum",0];
Command "start transaction read write";
PreparedCommand "sel28" [10,"Sum",0];
Command "commit";
ErasePreparedCommand "sel28";
CreatePreparedCommand "sel29" "select * from T where not(f1 contains freetext(?) expand (from (select f1 from T where f2 > ? limit 10))) limit 1";
PreparedCommand "sel29" ["全文検索の最新動向",0];
PreparedCommand "sel29" ["全文検索の最新動向",0];
Command "start transaction read write";
PreparedCommand "sel29" ["全文検索の最新動向",0];
Command "commit";
ErasePreparedCommand "sel29";
CreatePreparedCommand "sel30" "select * from T where f1 contains freetext('全文検索の最新動向') average length 120 df ?";
PreparedCommand "sel30" [10];
PreparedCommand "sel30" [10];
Command "start transaction read write";
PreparedCommand "sel30" [10];
Command "commit";
ErasePreparedCommand "sel30";
CreatePreparedCommand "sel31" "select * from T where f1 contains wordlist('索引','ファイル') average length ? df 10 score function ?";
PreparedCommand "sel31" [120,"Sum"];
PreparedCommand "sel31" [120,"Sum"];
Command "start transaction read write";
PreparedCommand "sel31" [120,"Sum"];
Command "commit";
ErasePreparedCommand "sel31";
CreatePreparedCommand "sel32" "select * from T where f1 contains wordlist('索引',?) calculator 'TfIdf' average length 120 df 10 score function 'Sum' expand (from (select f1 from T where f2 > ? limit 10)) limit 1";
PreparedCommand "sel32" ["ファイル",0];
PreparedCommand "sel32" ["ファイル",0];
Command "start transaction read write";
PreparedCommand "sel32" ["ファイル",0];
Command "commit";
ErasePreparedCommand "sel32";
Command "drop table T";
TerminateSession;
InitializeSession  "TESTDB";
Command "drop database TESTDB";
TerminateSession;
Terminate;
End;
