(57)【要約】【課題】ＳＱＬ文に記述された対象データの検索を高速化すること。【解決手段】情報処理装置１００は、制御文であって、当該制御文に含まれる語句の記述位置により当該制御文の内容が変化する語句を複数含む制御文を入力する処理と、制御文における語句ごとの位置情報に関する第１のインデックス情報を生成する処理と、第１のインデックス情報から、制御文に含まれる予約語それぞれに関して対象となる語句に関する第２のインデックス情報群を生成する処理と、を実行する。【選択図】図１
2019121166.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
制御文であって、当該制御文に含まれる語句の記述位置により当該制御文の内容が変化する語句を複数含む制御文を入力し、
前記制御文における前記語句ごとの位置情報に関する第１のインデックス情報を生成し、
前記第１のインデックス情報から、前記制御文に含まれる予約語それぞれに関して対象となる前記語句に関する第２のインデックス情報群を生成する
処理を実行させるインデックス生成プログラム。
【請求項２】
前記第２のインデックス情報群に含まれる前記第２のインデックス情報それぞれは、前記第１のインデックス情報のオフセット位置に関する第１の軸が、前記予約語に対してそれぞれ上位化されたインデックス情報である
請求項１に記載のインデックス生成プログラム。
【請求項３】
前記第１のインデックス情報は、
第２の軸に複数の前記語句に含まれる前記予約語と、対象となる前記語句とをそれぞれ含む
請求項１または２に記載のインデックス生成プログラム。
【請求項４】
制御文であって、当該制御文に含まれる語句の記述位置により当該制御文の内容が変化する語句を複数含む制御文を入力する入力部と、
前記制御文における前記語句ごとの位置情報に関する第１のインデックス情報を生成する第１インデックス生成部と、
前記第１のインデックス情報から、前記制御文に含まれる予約語それぞれに関して対象となる前記語句に関する第２のインデックス情報群を生成する第２インデックス生成部と、
を有するインデックス生成装置。
【請求項５】
コンピュータが、
制御文であって、当該制御文に含まれる語句の記述位置により当該制御文の内容が変化する語句を複数含む制御文を入力し、
前記制御文における前記語句ごとの位置情報に関する第１のインデックス情報を生成し、
前記第１のインデックス情報から、前記制御文に含まれる予約語それぞれに関して対象となる前記語句に関する第２のインデックス情報群を生成する
処理を実行するインデックス生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インデックス生成プログラム、インデックス生成装置およびインデックス生成方法に関する。
【背景技術】
【０００２】
ＳＱＬ文においては、SELECT／WHERE／FROMなどの予約語と、かかる予約語の対象となる対象データとを用いた制御文によって制御内容が記述されている。そして、かかるＳＱＬ文を処理するアプリケーションでは、ＳＱＬ文に記述された予約語および対象データに基づき、データベースに対する具体的な操作を行う。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−３１０８４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、ＳＱＬ文に記述された対象データを検索する場合、単に対象データの名称を検索するだけでなく、かかる対象データがどの予約語の対象となっているのかについても検索しなければならない。例えば、ＳＱＬ文に記述された対象データを検索する場合、ＳＱＬ文の予約語で全文検索をし、検索すべき箇所の予約語に続くデータを抽出し、抽出したデータが検索条件に該当するかどうかを判断する必要がある。したがって、ＳＱＬ文に記述された対象データの検索に時間がかかってしまう場合がある。
【０００５】
一つの側面では、ＳＱＬ文に記述された対象データの検索を高速化することができるインデックス生成プログラム等を提供することを目的とする。
【課題を解決するための手段】
【０００６】
第１の案では、インデックス生成プログラムは、コンピュータに、制御文であって、当該制御文に含まれる語句の記述位置により当該制御文の内容が変化する語句を複数含む制御文を入力し、前記制御文における前記語句ごとの位置情報に関する第１のインデックス情報を生成し、前記第１のインデックス情報から、前記制御文に含まれる予約語それぞれに関して対象となる前記語句に関する第２のインデックス情報群を生成する。
【発明の効果】
【０００７】
一実施形態によれば、ＳＱＬ文に記述された対象データの検索を高速化することができる。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施例に係る情報処理装置の構成の一例を示す機能ブロック図である。
【図２】図２は、実施例に係る基本インデックスの構成例を示す図である。
【図３】図３は、実施例に係るアドレステーブルの構成例を示す図である。
【図４】図４は、実施例に係る上位階層インデックス群の構成例を示す図である。
【図５】図５は、実施例に係るＳＱＬ文の検索処理の一例を示す図である。
【図６】図６は、実施例に係るＳＱＬ文の検索処理の別の一例を示す図である。
【図７】図７は、実施例のインデックス生成処理の流れの例を示す図である。
【図８】図８は、実施例の検索処理の流れの例を示す図である。
【図９】図９は、コンピュータのハードウェア構成例を示す図である。
【図１０】図１０は、コンピュータで動作するプログラムの構成例を示す図である。
【図１１】図１１は、実施形態のシステムにおける装置の構成例を示す図である。
【発明を実施するための形態】
【０００９】
以下に、本願の開示するインデックス生成プログラム、インデックス生成装置およびインデックス生成方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの権利範囲が限定されるものではない。各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例】
【００１０】
［実施例に係る情報処理装置の構成］
図１は、実施例に係る情報処理装置１００の構成の一例を示す機能ブロック図である。情報処理装置１００は、予約語および対象データの組み合わせにより記述されたＳＱＬ文１０（図２参照）を入力し、入力したＳＱＬ文１０に含まれる語句それぞれについて、語句の出現位置に関する基本インデックス１３２を生成する。
【００１１】
ＳＱＬ文１０は、制御文の一例であり、対象データをデータベースから取得するための命令文である。ここで、実施例に係るＳＱＬ文１０の一例を、図２を参照して説明する。図２は、実施例に係る基本インデックス１３２の構成例を示す図である。例えば、ＳＱＬ文１０である「SELECT  in1.col3,  in2.col3,  in2.col4  FROM  in1,  in2  WHERE  in1.col2  =  in2.col1  ;」のうち、語句「SELECT」「FROM」「WHERE」が予約語の一例であり、それ以外の語句が可変情報の一例である。また、かかる可変情報のうち、「in1.col3」「in2.col3」「in2.col4」「in1」「in2」「in1.col2」「in2.col1」が対象データの一例である。
【００１２】
なお、実施形態における「in1」の表記は、対象データ名が「in1」であることを示し、「in1.col3」の表記は、対象データ「in1」の３カラム目のデータであることを示す。また、ＳＱＬ文１０において、予約語「SELECT」は、「どの項目（カラム）のデータを検索するか」を指定し、予約語「FROM」は、「どの対象データから検索するか」を指定し、予約語「WHERE」は、「どのような条件で行を検索するか」を指定する。なお、実施形態では、理解を容易にするため、ＳＱＬ文１０における予約語を太文字で示す。
【００１３】
図１に戻って、情報処理装置１００は、符号化部１１０、検索部１２０および記憶部１３０を有する。記憶部１３０は、例えばフラッシュメモリ（Ｆｌａｓｈ  Ｍｅｍｏｒｙ）やＦＲＡＭ（登録商標）（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの不揮発性の半導体メモリ素子などの記憶装置に対応する。記憶部１３０は、静的辞書１３１、基本インデックス１３２、アドレステーブル１３３および上位階層インデックス群１３４を有する。基本インデックス１３２は、第１のインデックス情報の一例である。上位階層インデックス群１３４は、第２のインデックス情報群の一例である。
【００１４】
静的辞書１３１は、一般的な英語辞典、国語辞典や教科書などを基にして、ＳＱＬ文１０中に出現する予約語または可変情報の出現頻度を特定し、出現頻度のより高い予約語または可変情報に対して、より短い符号を割り当てた辞書である。静的辞書１３１には、それぞれの予約語または可変情報に対応する符号である静的コードがあらかじめ登録されている。
【００１５】
基本インデックス１３２は、ＳＱＬ文１０に含まれる予約語または可変情報について、オフセット（出現位置）ごとの存否をインデックス化した基本ビットマップの集合体である。つづいては、かかる基本インデックス１３２の詳細について、図２を参照しながら説明する。
【００１６】
基本インデックス１３２は、符号化対象のＳＱＬ文１０に含まれる各語句を指定するポインタと、ＳＱＬ文１０内における各語句のオフセット（出現位置）での存否を示すビットとを連結したビット列からなる。すなわち、基本インデックス１３２とは、符号化対象のＳＱＬ文１０に含まれる語句について、オフセット（出現位置）ごとの存否をインデックス化したビットマップのことをいう。一例として、語句がＳＱＬ文１０内のある出現位置に存在する場合には、出現位置に対応するオフセット（出現位置）の存否としてＯＮ、例えば２進数の「１」を示す出現ビットが設定される。語句がテキストデータ内のある出現位置に存在しない場合には、出現位置に対応するオフセット（出現位置）の存否としてＯＦＦ、例えば２進数の「０」が設定される（なお、実施形態において、出現ビットが「０」の場合は、かかる「０」の記載を省略する場合がある。）。語句を指定するポインタとしては、例えば、語句の語句ＩＤが採用される。語句ＩＤは、語句そのものであっても良いし、語句の符号であっても良い。語句の符号は、符号化されたコード（符号化コード）のことをいい、一例として、静的コードに対応する。
【００１７】
例えば、図２に示すように、基本インデックス１３２のＸ軸はオフセット（出現位置）を表し、Ｙ軸は語句ＩＤを表す。つまり、基本インデックス１３２に含まれる各ビットマップは、語句ＩＤが示す語句の、オフセット（出現位置）ごとの存否を表す。基本インデックス１３２のＸ軸は、第１の軸の一例である。また、図２に示すように、Ｙ軸は、語句が予約語である場合に登録される予約語層と、語句が可変情報である場合に登録される可変情報層とに分けられる。なお、基本インデックス１３２に含まれる各ビットマップは、それぞれ「基本ビットマップ」と呼称するものとする。
【００１８】
ここでは、符号化対象のＳＱＬ文１０の４番目の位置に予約語「FROM」が出現するので、予約語層に登録された予約語「FROM」に対応する基本ビットマップの４ビット目の出現位置にＯＮ、すなわち２進数の「１」を示す出現ビットが設定される。符号化対象のＳＱＬ文１０の５番目の位置に可変情報「in1」が出現するので、可変情報層に登録された可変情報「in1」に対応する基本ビットマップの５ビット目の出現位置にＯＮ、すなわち２進数の「１」を示す出現ビットが設定される。
【００１９】
図１に戻って、アドレステーブル１３３は、符号化データ１１内での各予約語のオフセット位置が登録されるテーブルである。つづいては、かかるアドレステーブル１３３の詳細について、図３を参照しながら説明する。
【００２０】
図３は、実施例に係るアドレステーブル１３３の構成例を示す図である。アドレステーブル１３３は、符号化対象のＳＱＬ文１０に含まれる各予約語のインデックスと、かかる各予約語のオフセット位置とが対応付けられて登録されるテーブルである。なお、アドレステーブル１３３に記載のインデックスにおいて、「Ｓ１」の表記は、１番目に出現する予約語「SELECT」を示し、「Ｆ１」の表記は、１番目に出現する予約語「FROM」を示し、「Ｗ１」の表記は、１番目に出現する予約語「WHERE」を示す。
【００２１】
ここでは、基本インデックス１３２の予約語「SELECT」の基本ビットマップにおいて、１番目の出現ビットが０ビット目に出現しているので、インデックス「Ｓ１」のオフセット位置は「０」に設定される。基本インデックス１３２の予約語「SELECT」の基本ビットマップにおいて、２番目の出現ビットが１１ビット目に出現しているので、インデックス「Ｓ２」のオフセット位置は「１１」に設定される。なお、予約語「FROM」や予約語「WHERE」などのインデックスについても、図３の例に示すように同様に設定される。
【００２２】
図１に戻って、上位階層インデックス群１３４は、各予約語ごとに、基本インデックス１３２の第１の軸を上位化した第２の軸を有するインデックス情報の一群である。つづいては、かかる上位階層インデックス群１３４の詳細について、図４を参照しながら説明する。
【００２３】
図４は、実施例に係る上位階層インデックス群１３４の構成例を示す図である。図４の例に示すように、上位階層インデックス群１３４は、各予約語に対応する複数の上位階層インデックス１３４ａ、１３４ｂ、１３４ｃ・・・が、ＳＱＬ文１０に記載される予約語の種類の数だけ一群となって構成される。例えば、上位階層インデックス１３４ａは予約語「SELECT」に対応し、上位階層インデックス１３４ｂは予約語「FROM」に対応し、上位階層インデックス１３４ｃは予約語「WHERE」に対応する。
【００２４】
かかる上位階層インデックス１３４ａ等は、基本インデックス１３２のＸ軸（オフセット（出現位置））である第１の軸を上位化した第２の軸を有する。かかる第２の軸は、アドレステーブル１３３に登録された各予約語のインデックスをそれぞれ１ビットに上位化（集約）した軸である。例えば、予約語「SELECT」に対応する上位階層インデックス１３４ａにおいて、第２の軸であるＸ軸は、アドレステーブル１３３に登録されたインデックスＳ１、Ｓ２、・・・を表す。予約語「FROM」に対応する上位階層インデックス１３４ｂにおいて、第２の軸であるＸ軸は、アドレステーブル１３３に登録されたインデックスＦ１、Ｆ２、・・・を表す。予約語「WHERE」に対応する上位階層インデックス１３４ｃにおいて、第２の軸であるＸ軸は、アドレステーブル１３３に登録されたインデックスＷ１、Ｗ２、・・・を表す。すなわち、上位階層インデックス１３４ａ等のＸ軸は、第２の軸の一例である。また、上位階層インデックス１３４ａ等のＹ軸は、各予約語の対象となる可変情報を表す。
【００２５】
一例として、１番目の予約語「SELECT」の対象として可変情報「in1.col3」が記載されている場合には、上位階層インデックス１３４ａにおける可変情報「in1.col3」の基本ビットマップにおける項目「Ｓ１」の出現位置にＯＮ、すなわち２進数の「１」を示す出現ビットが設定される。１番目の予約語「FROM」の対象として可変情報「in1」が記載されている場合には、上位階層インデックス１３４ｂにおける可変情報「in1」の基本ビットマップにおける項目「Ｆ１」の出現位置にＯＮ、すなわち２進数の「１」を示す出現ビットが設定される。１番目の予約語「WHERE」の対象として可変情報「in1.col2」が記載されている場合には、上位階層インデックス１３４ｃにおける可変情報「in1.col2」の基本ビットマップにおける項目「Ｗ１」の出現位置にＯＮ、すなわち２進数の「１」を示す出現ビットが設定される。なお、上位階層インデックス１３４ａ等への出現ビットは、ＳＱＬ文１０の可変情報が符号化される都度、かかる可変情報に対応するインデックスの出現位置に設定される。
【００２６】
［実施例に係る検索処理］
つづいて、ここまで説明した基本インデックス１３２、アドレステーブル１３３および上位階層インデックス群１３４を用いた検索処理の詳細について、図５および図６を参照しながら説明する。図５は、実施例に係るＳＱＬ文１０の検索処理の一例を示す図である。図５の例に示すように、検索処理は、検索キーワード１２の内容と、アドレステーブル１３３および上位階層インデックス群１３４の内容とに基づいて、以下の処理を行う。
【００２７】
検索要求受付部１２１は、図５の例に示すように、符号化データ１１に対する検索キーワード１２を受け付ける。ここでは、検索キーワード１２の内容は、制御文「FROM  in1,  in2」である。検索処理部１２２は、最初に、上位階層インデックス群１３４の中から、検索キーワード１２に含まれる予約語「FROM」に対応する上位階層インデックス１３４ｂを参照し、検索キーワード１２に含まれる可変情報「in1」の基本ビットマップと、可変情報「in2」の基本ビットマップとを抽出する（ステップＳ１０１）。
【００２８】
つづいて、検索処理部１２２は、抽出された可変情報「in1」の基本ビットマップと、可変情報「in2」の基本ビットマップとをＡＮＤビット演算する（ステップＳ１０２）。このＡＮＤビット演算した結果が、可変情報「in1」および可変情報「in2」を対象とする予約語「FROM」の位置である。そして、検索処理部１２２は、出現ビットが「１」を示すインデックスが有るか否かを判定し、出現ビットが「１」を示すインデックスを抽出する。ここでは、インデックス「Ｆ１」の出現ビットが「１」であり、その他のインデックスＦ２、Ｆ３・・・はいずれも出現ビットが「０」であることから、インデックス「Ｆ１」が抽出される。
【００２９】
ここで、検索処理部１２２は、検索キーワード１２に記載された予約語において、対象となる可変情報が順不同であるか否かを判定する。換言すると、検索キーワード１２に記載された予約語において、対象となる可変情報の順番に意味があるか否かを判定する。図５の例では、予約語「FROM」の対象となる可変情報は順不同（すなわち、可変情報「in1」と可変情報「in2」との順番に意味はない）ことから、検索処理部１２２は、先に抽出されたインデックス「Ｆ１」に基づいて、アドレステーブル１３３から、該当するインデックス「Ｆ１」を絞り込む（ステップＳ１０３）。なお、各予約語において、対象となる可変情報の順番に意味が有るか否かは、予め記憶部１３０に記憶しておけば良い。
【００３０】
次に、検索処理部１２２は、アドレステーブル１３３から、絞り込んだインデックス「Ｆ１」に対応するＳＱＬ文１０の開始位置（この場合、インデックス「Ｓ１」）のオフセット位置（この場合、オフセット位置「０」）を取得する（ステップＳ１０４）。そして、検索処理部１２２は、取得されたＳＱＬ文１０の開始位置のオフセット位置に基づいて符号化データ１１を参照し（ステップＳ１０５）、対応する符号化された文字列（以下、符号化文字列とも呼称する。）を抽出する（ステップＳ１０６）。
【００３１】
次に、検索処理部１２２は、抽出された符号化文字列を、静的辞書１３１に基づいて復号化する（ステップＳ１０７）。最後に、検索結果出力部１２３は、復号化された検索結果をＳＱＬ文１０として出力する。
【００３２】
ここまで説明した実施形態に係る検索処理では、上位階層インデックス群１３４およびアドレステーブル１３３により検索領域を絞り込むことで、符号化データ１１から検索キーワード１２を高速に検索することができる。
【００３３】
図６は、実施例に係るＳＱＬ文１０の検索処理の別の一例を示す図である。図６の例では、検索キーワード１２に記載された予約語において、対象となる可変情報が順不同ではない（すなわち、可変情報の記載順に意味がある）場合の例について説明する。ここでは、可変情報の記載順に意味がある予約語「SELECT」に関して検索した場合について説明する。
【００３４】
検索要求受付部１２１は、図６の例に示すように、符号化データ１１に対する検索キーワード１２を受け付ける。ここでは、検索キーワード１２の内容は、制御文「SELECT  in1.col3,  in3.col3」である。検索処理部１２２は、最初に、上位階層インデックス群１３４の中から、予約語「SELECT」に対応する上位階層インデックス１３４ａを参照し、検索キーワード１２に含まれる可変情報「in1.col3」の基本ビットマップと、可変情報「in3.col3」の基本ビットマップとを抽出する（ステップＳ２０１）。
【００３５】
つづいて、検索処理部１２２は、抽出された可変情報「in1.col3」の基本ビットマップと、可変情報「in3.col3」の基本ビットマップとをＡＮＤビット演算する（ステップＳ２０２）。このＡＮＤビット演算した結果が、可変情報「in1.col3」および可変情報「in3.col3」を対象とする予約語「SELECT」の位置である。そして、検索処理部１２２は、出現ビットが「１」を示すインデックスが有るか否かを判定し、出現ビットが「１」を示すインデックスを抽出する。ここでは、インデックス「Ｓ２」の出現ビットおよびインデックス「Ｓ５」の出現ビットが「１」であり、その他のインデックスＳ１、Ｓ３、Ｓ４・・・はいずれも出現ビットが「０」であることから、インデックス「Ｓ２」「Ｓ５」が抽出される。
【００３６】
ここで、検索処理部１２２は、検索キーワード１２に記載された予約語において、対象となる可変情報が順不同であるか否かを判定する。図６の例では、予約語「SELECT」の対象となる可変情報は順不同ではないことから、検索処理部１２２は、基本インデックス１３２から、検索キーワード１２に含まれる語句（図６の例では、予約語「SELECT」、可変情報「in1.col3」および可変情報「in3.col3」）すべての基本ビットマップを抽出し、転置インデックス１３を生成する（ステップＳ２０３）。さらに、検索処理部１２２は、生成された転置インデックス１３の中から、ステップＳ２０２で抽出されたインデックス「Ｓ２」および「Ｓ５」の対象区間における可変情報「in1.col3」および可変情報「in3.col3」のビットマップを抽出する（ステップＳ２０４）。なお、ステップＳ２０４の際、検索キーワード１２において先に記載された可変情報（図６の例では、可変情報「in1.co3」）のビットマップは、１ビットだけ右シフトしてから抽出される。
【００３７】
次に、検索処理部１２２は、抽出された可変情報「in1.col3」の基本ビットマップと、可変情報「in3.col3」の基本ビットマップとをＡＮＤビット演算し、かかるＡＮＤビット演算の結果、出現ビットに「１」があるインデックスを抽出する（ステップＳ２０５）。図６の例では、インデックス「Ｓ２」には出現ビットに「１」があるのに対し、インデックス「Ｓ５」には出現ビットに「１」はなく、すべて「０」である。したがって、ステップＳ２０５より、インデックス「Ｓ２」が抽出される。つづいて、検索処理部１２２は、抽出されたインデックス「Ｓ２」に基づいて、アドレステーブル１３３から、該当するインデックス「Ｓ２」を絞り込む（ステップＳ２０６）。なお、かかるステップＳ２０６は、図５の例に示したステップＳ１０３と同様の処理であるので、詳細は省略する。
【００３８】
次に、検索処理部１２２は、アドレステーブル１３３から、絞り込んだインデックス「Ｓ２」に対応するＳＱＬ文１０の開始位置のオフセット位置を取得する。そして、検索処理部１２２は、取得されたＳＱＬ文１０の開始位置のオフセット位置に基づいて符号化データ１１を参照し、対応する符号化文字列を抽出する（ステップＳ２０７）。なお、かかるステップＳ２０７は、図５の例に示したステップＳ１０５、Ｓ１０６と同様の処理であるので、詳細は省略する。
【００３９】
次に、検索処理部１２２は抽出された符号化文字列を、静的辞書１３１に基づいて復号化する（ステップＳ２０８）。最後に、検索結果出力部１２３は、復号化された検索結果をＳＱＬ文１０として出力する。
【００４０】
ここまで説明した実施形態に係る検索処理では、可変情報の記載順に意味がある予約語に関して検索する場合にも、基本インデックス１３２から転置インデックス１３を動的に抽出することで、符号化データ１１から検索キーワード１２を高速に検索することができる。
【００４１】
図１に戻って、符号化部１１０および検索部１２０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、符号化部１１０および検索部１２０は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路の電子回路に対応する。または、符号化部１１０および検索部１２０は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）等の電子回路に対応する。
【００４２】
符号化部１１０は、図２〜図４で示した符号化処理を実行する処理部である。符号化部１１０は、ファイルリード部１１１、予約語／可変情報取得部１１２、基本インデックス生成部１１３、符号化処理部１１４、上位階層インデックス生成部１１５およびファイルライト部１１６を有する。ファイルリード部１１１は、入力部の一例である。基本インデックス生成部１１３は、第１インデックス生成部の一例である。上位階層インデックス生成部１１５は、第２インデックス生成部の一例である。
【００４３】
ファイルリード部１１１は、符号化対象のＳＱＬ文１０を記憶領域に読み出す。
【００４４】
予約語／可変情報取得部１１２は、ＳＱＬ文１０から予約語または可変情報を取得する。例えば、予約語／可変情報取得部１１２は、記憶領域に読み出したＳＱＬ文１０に対して字句解析を行う。予約語／可変情報取得部１１２は、字句解析した結果の予約語または可変情報を、ＳＱＬ文１０の先頭から順番に取得する。予約語／可変情報取得部１１２は、取得した予約語または可変情報と、それぞれのＳＱＬ文１０内の出現位置とを対応づけて基本インデックス生成部１１３に出力する。予約語／可変情報取得部１１２は、取得した予約語または可変情報を符号化処理部１１４に出力する。
【００４５】
基本インデックス生成部１１３は、基本インデックス１３２を生成する。例えば、基本インデックス生成部１１３は、予約語／可変情報取得部１１２から出力された予約語について、当該予約語に対応する基本ビットマップを、基本インデックス１３２から抽出する。基本インデックス生成部１１３は、抽出した基本ビットマップのうち、ＳＱＬ文１０内の出現位置に対応するビットに出現ビットを設定する。また、基本インデックス生成部１１３は、予約語／可変情報取得部１１２から出力された可変情報について、当該可変情報に対応する基本ビットマップを、基本インデックス１３２から抽出する。基本インデックス生成部１１３は、抽出した基本ビットマップのうち、ＳＱＬ文１０内の出現位置に対応するビットに出現ビットを設定する。
【００４６】
符号化処理部１１４は、予約語または可変情報を符号化する。例えば、符号化処理部１１４は、予約語／可変情報取得部１１２から出力された予約語を、静的辞書１３１に登録されている静的コードに符号化する。また、符号化処理部１１４は、予約語／可変情報取得部１１２から出力された可変情報を、静的辞書１３１に登録されている静的コードに符号化する。
【００４７】
上位階層インデックス生成部１１５は、基本インデックス１３２、およびアドレステーブル１３３の内容に基づき、第１の軸を上位化した第２の軸を有する上位階層インデックス１３４ａ等の一群である上位階層インデックス群１３４を生成する。例えば、上位階層インデックス生成部１１５は、生成されたアドレステーブル１３３のインデックスを上位階層インデックス１３４ａ等の横軸に登録する。上位階層インデックス生成部１１５は、可変情報を上位階層インデックス１３４ａ等の縦軸に登録し、ＳＱＬ文１０内の出現位置に対応するビットに出現ビットを立てる。
【００４８】
ファイルライト部１１６は、符号化処理部１１４によって符号化された符号化コードを符号化データ１１に格納する。
【００４９】
検索部１２０は、図５および図６で示した検索処理を実行する処理部である。検索部１２０は、検索要求受付部１２１、検索処理部１２２および検索結果出力部１２３を有する。
【００５０】
検索要求受付部１２１は、符号化データ１１に対する検索要求を受け付ける。例えば、検索要求受付部１２１は、検索要求として検索対象の予約語列または検索対象の可変情報列を受け付ける。検索要求受付部１２１は、検索要求として予約語と可変情報とが混在した語句列を受け付けても良い。
【００５１】
検索処理部１２２は、基本インデックス１３２、アドレステーブル１３３および上位階層インデックス群１３４を用いて、検索要求としての検索対象の予約語列または検索要求としての検索対象の可変情報列に対応した、符号化データ１１に対する検索を行う。
【００５２】
例えば、検索処理部１２２は、最初に、上位階層インデックス群１３４の中から、検索対象の予約語に対応する上位階層インデックス１３４ａ等を参照し、検索対象の各可変情報の基本ビットマップを抽出する。つづいて、検索処理部１２２は、抽出された各可変情報の基本ビットマップをＡＮＤビット演算する。そして、検索処理部１２２は、出現ビットが「１」を示すインデックスが有るか否かを判定し、出現ビットが「１」を示すインデックスを抽出する。
【００５３】
そして、検索処理部１２２は、検索対象の予約語において、対象となる可変情報が順不同（すなわち、対象となる可変情報の順番に意味はない）であるか否かを判定する。そして、検索対象の予約語において、対象となる可変情報が順不同である場合、すなわち対象となる可変情報の順番に意味がない場合、検索処理部１２２は、先に抽出されたインデックスに基づいて、アドレステーブル１３３から、該当するインデックスを絞り込む。
【００５４】
次に、検索処理部１２２は、アドレステーブル１３３から、絞り込んだインデックスに対応するＳＱＬ文１０の開始位置のオフセット位置を取得する。そして、検索処理部１２２は、取得されたＳＱＬ文１０の開始位置のオフセット位置に基づいて符号化データ１１を参照し、対応する符号化文字列を抽出する。次に、検索処理部１２２は、抽出された符号化文字列を、静的辞書１３１に基づいて復号化する。
【００５５】
一方、検索対象の予約語において、対象となる可変情報が順不同ではない場合、すなわち対象となる可変情報の順番に意味がある場合、検索処理部１２２は、基本インデックス１３２から、検索キーワード１２に含まれる語句すべての基本ビットマップを抽出し、転置インデックス１３を生成する。さらに、検索処理部１２２は、生成された転置インデックス１３の中から、先に抽出されたインデックスの対象区間における各可変情報のビットマップを抽出する。この際、検索キーワード１２において先に記載された可変情報のビットマップは、１ビットだけ右シフトしてから抽出される。
【００５６】
次に、検索処理部１２２は、抽出された各可変情報の基本ビットマップをＡＮＤビット演算し、かかるＡＮＤビット演算の結果、出現ビットに「１」があるインデックスを抽出する。つづいて、検索処理部１２２は、抽出されたインデックスに基づいて、アドレステーブル１３３から、該当するインデックスを絞り込む。
【００５７】
次に、検索処理部１２２は、アドレステーブル１３３から、絞り込んだインデックスに対応するＳＱＬ文１０の開始位置のオフセット位置を取得する。そして、検索処理部１２２は、取得されたＳＱＬ文１０の開始位置のオフセット位置に基づいて符号化データ１１を参照し、対応する符号化文字列を抽出する。次に、検索処理部１２２は抽出された符号化文字列を、静的辞書１３１に基づいて復号化する。
【００５８】
検索結果出力部１２３は、検索結果を出力する。例えば、検索結果出力部１２３は、検索処理部１２２によって検索対象が存在すると判定された場合には、検索結果として検索対象が存在する旨を出力する。検索結果出力部１２３は、検索処理部１２２によって検索対象が存在しないと判定された場合には、検索結果として検索対象が存在しない旨を出力する。
【００５９】
［実施例に係るインデックス生成処理の処理手順］
図１に示した符号化部１１０の処理手順について、図７を参照して説明する。図７は、実施例のインデックス生成処理の流れの例を示す図である。最初に、ファイルリード部１１１は、前処理（例えば、各種記憶領域を記憶部１３０に確保する、など）を実行した後、符号化対象の制御文ファイル（例えば、ＳＱＬ文１０）を入力する（ステップＳ１０）。
【００６０】
次に、予約語／可変情報取得部１１２は、読出用の記憶領域から制御文ファイルを語句（予約語または可変情報）ごとに読み取る（ステップＳ１１）。例えば、予約語／可変情報取得部１１２は、読出用の記憶領域に格納されたＳＱＬ文１０を字句解析し、字句解析した結果の語句（予約語または可変情報）を、ＳＱＬ文１０の先頭から順番に取得する。
【００６１】
次に、予約語／可変情報取得部１１２は、取得した語句が予約語であるか可変情報であるかを判定する（ステップＳ１２）。そして、取得した語句が予約語であると判定した場合（ステップＳ１２，予約語）、基本インデックス生成部１１３は、取得した予約語を予約語層に登録し、かかる予約語を基本インデックス１３２に登録して、出現位置に対するビットに出現ビットを立てる（ステップＳ１３）。一方、取得した語句が可変情報であると判定した場合（ステップＳ１２，可変情報）、基本インデックス生成部１１３は、取得した可変情報を可変情報層に登録し、かかる可変情報を基本インデックス１３２に登録して、出現位置に対するビットに出現ビットを立てる（ステップＳ１３）。
【００６２】
次に、符号化処理部１１４は、取得した各語句を、静的辞書１３１に登録されている静的コードに符号化する（ステップＳ１４）。そして、制御文ファイルの末尾に到達するまで、ステップＳ１１からのループをくり返す（ステップＳ１５）。かかるループの際、基本インデックス生成部１１３は、アドレステーブル１３３を並行して生成する。また、取得した語句が基本インデックス１３２にすでに登録されている場合、基本インデックス生成部１１３は、取得した語句に対応する基本ビットマップを基本インデックス１３２から抽出し、抽出した基本ビットマップにおける、制御文ファイル内の取得した語句の出現位置に対応するビットに出現ビットを立てる。
【００６３】
そして、制御文ファイルの末尾に到達した場合、上位階層インデックス生成部１１５は、生成されたアドレステーブル１３３のインデックスを上位階層インデックス１３４ａ等の横軸に登録する（ステップＳ１６）。そして、上位階層インデックス生成部１１５は、可変情報を上位階層インデックス１３４ａ等の縦軸に登録し、出現ビットを立てて（ステップＳ１７）、処理を終了する。
【００６４】
［実施例に係る検索処理の処理手順］
図１に示した検索部１２０の処理手順について、図８を参照して説明する。図８は、実施例の検索処理の流れの例を示す図である。
【００６５】
最初に、検索要求受付部１２１には、検索キーワード１２が入力される（ステップＳ２１）。次に、検索処理部１２２は、対応する上位階層インデックス１３４ａ等において、検索キーワード１２を検索する（ステップＳ２２）。そして、検索処理部１２２は、検索結果のビット列を上位階層インデックス１３４ａ等から抽出し、ＡＮＤビット演算を実行する（ステップＳ２３）。次に、検索処理部１２２は、該当するアドレステーブル１３３のインデックスを絞り込む（ステップＳ２４）。
【００６６】
そして、検索処理部１２２は、検索キーワード１２に記載された予約語において、対象となる可変情報が順不同であるか否かを判定する（ステップＳ２５）。ここで、対応する可変情報が順不同であると判定した場合（ステップＳ２５，Ｙｅｓ）、検索処理部１２２は、アドレステーブル１３３から、絞り込んだインデックスに対応する検索対象文の開始位置のオフセット位置を取得する（ステップＳ２６）。そして、検索処理部１２２は、取得されたオフセット位置に基づいて、符号化データ１１から符号化文字列を抽出する（ステップＳ２７）。次に、検索処理部１２２は、静的辞書１３１を参照し、抽出された符号化文字列を復号化する（ステップＳ２８）。最後に、検索結果出力部１２３は、復号化された符号化文字列を検索結果として出力し（ステップＳ２９）、処理を終了する。
【００６７】
一方で、対象となる可変情報が順不同ではないと判定した場合（ステップＳ２５，Ｎｏ）、検索処理部１２２は、絞り込んだインデックスに対して、基本インデックス１３２から動的に転置インデックス１３を抽出する（ステップＳ３０）。そして、検索処理部１２２は、抽出された転置インデックス１３の中から、先に抽出されたインデックスの対象区間における可変情報のビットマップを、出現ビットのシフトを行いながら抽出し、抽出された可変情報のビットマップのＡＮＤビット演算を実行する（ステップＳ３１）。そして、ステップＳ２６の処理に移行する。
【００６８】
［実施例の効果］
このようにして、上記実施例では、符号化部１１０は、制御文であって、当該制御文に含まれる語句の記述位置により当該制御文の内容が変化する語句を複数含む制御文（ＳＱＬ文１０）を入力する。符号化部１１０は、制御文（ＳＱＬ文１０）における語句ごとの位置情報に関する第１のインデックス情報（基本インデックス１３２）を生成する。そして、符号化部１１０は、第１のインデックス情報（基本インデックス１３２）から、制御文（ＳＱＬ文１０）に含まれる予約語それぞれに関して対象となる語句に関する第２のインデックス情報群（上位階層インデックス群１３４）を生成する。かかる構成によれば、符号化部１１０は、基本インデックス１３２からＳＱＬ文１０に含まれる予約語それぞれに関して上位階層のインデックスを生成することで、ＳＱＬ文１０における検索処理に検索対象の特定を高速にさせることができる。すなわち、検索部１２０は、上位階層インデックス群１３４およびアドレステーブル１３３により検索領域を絞り込むことで、符号化データ１１から検索キーワード１２を高速に検索することができる。
【００６９】
また、上記実施例では、第２のインデックス情報群に含まれる第２のインデックス情報それぞれは、第１のインデックス情報のオフセット位置に関する第１の軸が、予約語に対してそれぞれ上位化されたインデックス情報である。ここで、第２のインデックス情報群は上位階層インデックス群１３４に対応し、第２のインデックス情報は上位階層インデックス１３４ａ等に対応し、第１のインデックス情報は基本インデックス１３２に対応する。かかる構成によれば、検索部１２０は、予約語の粒度で検索を行うことで、演算量を抑えて検索を行うことができる。
【００７０】
また、上記実施例では、第２の軸に複数の語句に含まれる予約語と、対象となる語句（可変情報）とをそれぞれ含む。かかる構成によれば、検索処理部１２２は、基本インデックス１３２における予約語層と可変情報層それぞれから対象となる基本ビットマップを抽出することで、効率よく転置インデックス１３を生成することができる。
【００７１】
［実施例に関連する他の態様］
以下、上述の実施形態における変形例の一部を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行われうる。
【００７２】
例えば、実施例では、制御文ファイルがＳＱＬ文１０である場合について説明したが、制御文ファイルはＳＱＬ文に限られず、その他の制御文であってもよい。
【００７３】
また、実施例に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００７４】
［情報処理装置のハードウェア構成］
下記に、上述の実施形態に用いられるハードウェアおよびソフトウェアについて説明する。図９は、コンピュータ１のハードウェア構成例を示す図である。コンピュータ１は、例えば、プロセッサ３０１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０２、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０３、ドライブ装置３０４、記憶媒体３０５、入力インターフェース（Ｉ／Ｆ）３０６、入力デバイス３０７、出力インターフェース（Ｉ／Ｆ）３０８、出力デバイス３０９、通信インターフェース（Ｉ／Ｆ）３１０、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）インターフェース（Ｉ／Ｆ）３１１およびバス３１２などを含む。それぞれのハードウェアはバス３１２を介して接続されている。
【００７５】
ＲＡＭ３０２は読み書き可能なメモリ装置であって、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）やＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）などの半導体メモリ、またはＲＡＭでなくてもフラッシュメモリなどが用いられる。ＲＯＭ３０３は、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）なども含む。ドライブ装置３０４は、記憶媒体３０５に記録された情報の読み出しか書き込みかの少なくともいずれか一方を行なう装置である。記憶媒体３０５は、ドライブ装置３０４によって書き込まれた情報を記憶する。記憶媒体３０５は、例えば、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などのフラッシュメモリ、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）、ブルーレイディスクなどの記憶媒体である。また、例えば、コンピュータ１は、複数種類の記憶媒体それぞれについて、ドライブ装置３０４および記憶媒体３０５を設ける。
【００７６】
入力インターフェース３０６は、入力デバイス３０７と接続されており、入力デバイス３０７から受信した入力信号をプロセッサ３０１に伝達する回路である。出力インターフェース３０８は、出力デバイス３０９と接続されており、出力デバイス３０９に、プロセッサ３０１の指示に応じた出力を実行させる回路である。通信インターフェース３１０はネットワーク３を介した通信の制御を行なう回路である。通信インターフェース３１０は、例えばネットワークインターフェースカード（ＮＩＣ）などである。ＳＡＮインターフェース３１１は、ストレージエリアネットワークによりコンピュータ１と接続された記憶装置との通信の制御を行なう回路である。ＳＡＮインターフェース３１１は、例えばホストバスアダプタ（ＨＢＡ）などである。
【００７７】
入力デバイス３０７は、操作に応じて入力信号を送信する装置である。入力信号は、例えば、キーボードやコンピュータ１の本体に取り付けられたボタンなどのキー装置や、マウスやタッチパネルなどのポインティングデバイスである。出力デバイス３０９は、コンピュータ１の制御に応じて情報を出力する装置である。出力デバイス３０９は、例えば、ディスプレイなどの画像出力装置（表示デバイス）や、スピーカーなどの音声出力装置などである。また、例えば、タッチスクリーンなどの入出力装置が、入力デバイス３０７および出力デバイス３０９として用いられる。また、入力デバイス３０７および出力デバイス３０９は、コンピュータ１と一体になっていても良いし、コンピュータ１に含まれず、例えば、コンピュータ１に外部から接続する装置であっても良い。
【００７８】
例えば、プロセッサ３０１は、ＲＯＭ３０３や記憶媒体３０５に記憶されたプログラムをＲＡＭ３０２に読み出し、読み出されたプログラムの手順に従って符号化部１１０および検索部１２０の処理を行なう。その際にＲＡＭ３０２はプロセッサ３０１のワークエリアとして用いられる。記憶部１３０の機能は、ＲＯＭ３０３および記憶媒体３０５がプログラムファイル（後述のアプリケーションプログラム２４、ミドルウェア２３およびＯＳ２２など）やデータファイル（例えば、静的辞書１３１、基本インデックス１３２、アドレステーブル１３３、上位階層インデックス群１３４など）を記憶し、ＲＡＭ３０２がプロセッサ３０１のワークエリアとして用いられることによって実現される。プロセッサ３０１が読み出すプログラムについては、図１０を用いて説明する。
【００７９】
図１０は、コンピュータ１で動作するプログラムの構成例を示す図である。コンピュータ１において、図９に示すハードウェア群（ＨＷ）２１（３０１〜３１２）の制御を行なうＯＳ（オペレーティング・システム）２２が動作する。ＯＳ２２に従った手順でプロセッサ３０１が動作して、ハードウェア群（ＨＷ）２１の制御・管理が行なわれることにより、アプリケーションプログラム（ＡＰ）２４やミドルウェア（ＭＷ）２３に従った処理がハードウェア群２１で実行される。さらに、コンピュータ１において、ミドルウェア（ＭＷ）２３またはアプリケーションプログラム（ＡＰ）２４が、ＲＡＭ３０２に読み出されてプロセッサ３０１により実行される。
【００８０】
プロセッサ３０１が、符号化機能が呼び出された場合に、ミドルウェア２３またはアプリケーションプログラム２４の少なくとも一部に基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてハードウェア群２１を制御して）符号化部１１０および検索部１２０の機能が実現される。符号化機能および検索機能は、アプリケーションプログラム２４自体に含まれても良いし、アプリケーションプログラム２４に従って呼び出されることで実行されるミドルウェア２３の一部であっても良い。
【００８１】
図１１は、実施形態のシステムにおける装置の構成例を示す図である。図１１のシステムは、コンピュータ１ａ、コンピュータ１ｂ、基地局２およびネットワーク３を含む。コンピュータ１ａは、無線または有線の少なくとも一方により、コンピュータ１ｂと接続されたネットワーク３に接続している。
【００８２】
図１に示す符号化部１１０と検索部１２０とは、図１１に示すコンピュータ１ａとコンピュータ１ｂとのいずれに含まれても良い。コンピュータ１ｂが符号化部１１０の機能を含み、コンピュータ１ａが検索部１２０の機能を含んでも良いし、コンピュータ１ａが符号化部１１０の機能を含み、コンピュータ１ｂが検索部１２０の機能を含んでも良い。また、コンピュータ１ａとコンピュータ１ｂとの双方が、符号化部１１０の機能および検索部１２０の機能を備えても良い。
【符号の説明】
【００８３】
１００  情報処理装置
１１０  符号化部
１１１  ファイルリード部
１１２  予約語／可変情報取得部
１１３  基本インデックス生成部
１１４  符号化処理部
１１５  上位階層インデックス生成部
１１６  ファイルライト部
１２０  検索部
１２１  検索要求受付部
１２２  検索処理部
１２３  検索結果出力部
１３０  記憶部
１３１  静的辞書
１３２  基本インデックス
１３３  アドレステーブル
１３４  上位階層インデックス群
【図１】
2019121166.tif 000003
【図２】
2019121166.tif 000004
【図３】
2019121166.tif 000005
【図４】
2019121166.tif 000006
【図５】
2019121166.tif 000007
【図６】
2019121166.tif 000008
【図７】
2019121166.tif 000009
【図８】
2019121166.tif 000010
【図９】
2019121166.tif 000011
【図１０】
2019121166.tif 000012
【図１１】
2019121166.tif 000013