(57)【要約】【課題】文書データから検索要求が示す単語列または文字列を高速に検索する。【解決手段】情報処理装置１００は、符号化データに対する検索要求を受け付けると、符号化データのインデックス情報であって、文字または単語の符号化データの元データ内での出現位置を第１の軸としたビットマップ型インデックス１３２、および検索要求の内容に基づき、第１の軸を上位化した第２の軸を有する上位階層のインデックス情報を生成する。情報処理装置１００は、上位階層のインデックス情報を用いて、検索要求に対応した符号化データに対する検索を行う。【選択図】図６
2018163505.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
符号化テキストデータに対する検索要求を受け付け、
前記符号化テキストデータのインデックス情報であって、文字または単語の前記符号化テキストデータの元データ内での出現位置を第１の軸とした第１のインデックス情報、および前記検索要求の内容に基づき、前記第１の軸を上位化した第２の軸を有する第２のインデックス情報を生成し、
前記第２のインデックス情報を用いて、前記検索要求に対応した前記符号化テキストデータに対する検索を行う
処理を行わせる検索プログラム。
【請求項２】
前記生成する処理は、前記検索要求の第１のキーワードについて、前記第１のインデックス情報を用いて、前記第１の軸を上位化した第２の軸を有する前記第２のインデックス情報を生成する
ことを特徴とする請求項１に記載の検索プログラム。
【請求項３】
前記生成する処理は、前記検索要求の、前記元データの区切り単位を含む内容に基づき、前記第１の軸を上位化して前記第２のインデックス情報を生成する
ことを特徴とする請求項１に記載の検索プログラム。
【請求項４】
符号化テキストデータに対する検索要求を受け付ける受付部と、
前記符号化テキストデータのインデックス情報であって、文字または単語の前記符号化テキストデータの元データ内での出現位置を第１の軸とした第１のインデックス情報、および前記検索要求の内容に基づき、前記第１の軸を上位化した第２の軸を有する第２のインデックス情報を生成する生成部と、
前記第２のインデックス情報を用いて、前記検索要求に対応した前記符号化テキストデータに対する検索を行う検索部と、
を有することを特徴とする情報処理装置。
【請求項５】
コンピュータが、
符号化テキストデータに対する検索要求を受け付け、
前記符号化テキストデータのインデックス情報であって、文字または単語の前記符号化テキストデータの元データ内での出現位置を第１の軸とした第１のインデックス情報、および前記検索要求の内容に基づき、前記第１の軸を上位化した第２の軸を有する第２のインデックス情報を生成し、
前記第２のインデックス情報を用いて、前記検索要求に対応した前記符号化テキストデータに対する検索を行う
各処理を実行する検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検索プログラムなどに関する。
【背景技術】
【０００２】
文字や単語それぞれに対して、ファイルごとの存在有無を示すインデックスを生成し、検索に利用する技術が知られている。
【０００３】
また、多段状に積層されたインデックスを用いて、複数のドキュメントの中から検索条件に基づいた所望のドキュメントを検索する技術が知られている（例えば、特許文献１など参照）。かかる技術では、検索装置は、検索条件を獲得し、階層的に形成されたビットマップ表を多段状に積層したインデックスから検索条件に基づいて最上段から最下段まで順にビットマップ表を獲得する。そして、検索装置は、獲得したビットマップ表の中から検索条件に対応したビットマップ列を抽出してビットワイズ演算を行うことでビットマップを算出する。ビットワイズ演算とは、検索条件が「ＡＮＤ検索」の場合には論理積をとることを指し、検索条件が「ＯＲ検索」の場合には論理和をとることを指す。そして、検索装置は、最下段で算出されたビットマップにおいてビットが割り当てられた位置に対応するドキュメントを複数のドキュメントの中から抽出する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−０４８３５２号公報
【特許文献２】特開２０１４−０３５７６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の技術では、文書データから検索条件が示す単語列または文字列を高速に検索することが難しいという問題がある。
【０００６】
例えば、文字や単語それぞれに対するファイルごとの存在有無を示すインデックスを用いて検索する第１の技術では、単語列（または文字列）に含まれる各単語（または各文字）がどのファイルに存在するかを検索できる。ところが、通常、検索条件が示す単語列（または文字列）は、連続する単語の列である。そうすると、検索装置が、検索条件が示す単語列（または文字列）に含まれる単語（または文字）の順序を含めて検索するには、検索条件を構成する各単語（または各文字）の位置が連続しているかについて、改めて検証する必要がある。したがって、第１の技術では、文書データから検索条件が示す単語列または文字列を高速に検索することが難しい。
【０００７】
ここで、第１の技術を用いて、検索条件が示す単語列を検索する場合に、高速に検索することが難しいという問題について、図１を参照して説明する。図１は、検索処理の参考例を示す模式図である。図１に示すように、単語が示す単語ＩＤそれぞれに対して、ファイルごとの存在有無をビット値で示したインデックスが生成されたものとする。すると、検索処理は、検索要求が単語列「ａｂｃ」である場合に、単語列「ａｂｃ」に含まれる各単語がファイルｆ２に存在することを検索できる。ところが、検索処理は、各単語がファイルｆ２にどのような順序で存在するのかを検索できない。検索処理が単語列「ａｂｃ」に含まれる単語の順序を含めて検索するには、例えばファイルｆ２を参照して改めて検証する必要がある。したがって、第１の技術では、文書データから検索条件が示す単語列または文字列を高速に検索することが難しい。
【０００８】
また、多段状に積層されたインデックスを用いて検索する第２の技術であっても、検索装置は、検索条件に基づいて対象のドキュメントを検索できる。ところが、検索条件が単語列である場合には、検索装置が、検索条件が示す単語列に含まれる単語の順序を含めて検索するには、検索条件を構成する各単語の位置が連続しているかについて、改めて検証する必要がある。したがって、第２の技術でも、文書データから検索条件が示す単語列または文字列を高速に検索することが難しい。
【０００９】
１つの側面では、文書データから検索条件が示す単語列または文字列を高速に検索することを目的とする。
【課題を解決するための手段】
【００１０】
第１の案では、検索プログラムは、コンピュータに、符号化テキストデータに対する検索要求を受け付け、前記符号化テキストデータのインデックス情報であって、文字または単語の前記符号化テキストデータの元データ内での出現位置を第１の軸とした第１のインデックス情報、および前記検索要求の内容に基づき、前記第１の軸を上位化した第２の軸を有する第２のインデックス情報を生成し、前記第２のインデックス情報を用いて、前記検索要求に対応した前記符号化テキストデータに対する検索を行う、処理を実行させる。
【発明の効果】
【００１１】
１つの態様によれば、文書データから検索条件が示す単語列または文字列を高速に検索することができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、検索処理の参考例を示す模式図である。
【図２】図２は、実施例１に係る検索処理を示す模式図である。
【図３】図３は、実施例１に係る符号化処理の流れの一例を示す図である。
【図４】図４は、実施例１に係る符号化ファイルの構成例を示す図である。
【図５Ａ】図５Ａは、実施例１に係る検索処理の流れの一例を示す図（１）である。
【図５Ｂ】図５Ｂは、実施例１に係る検索処理の流れの一例を示す図（２）である。
【図６】図６は、実施例１に係る情報処理装置の構成の一例を示す機能ブロック図である。
【図７】図７は、実施例１に係る符号化処理のフローチャートの一例を示す図である。
【図８】図８は、実施例１に係る検索処理のフローチャートの一例を示す図である。
【図９】図９は、実施例１に係る上位階層ビットマップ生成処理のフローチャートの一例を示す図である。
【図１０】図１０は、実施例２に係る検索処理を示す模式図である。
【図１１】図１１は、実施例２に係る符号化処理の流れの一例を示す図である。
【図１２Ａ】図１２Ａは、実施例２に係る検索処理の流れの一例を示す図（１）である。
【図１２Ｂ】図１２Ｂは、実施例２に係る検索処理の流れの一例を示す図（２）である。
【図１３】図１３は、実施例２に係る情報処理装置の構成の一例を示す機能ブロック図である。
【図１４】図１４は、実施例２に係るオフセットテーブルのデータ構造の一例を示す図である。
【図１５】図１５は、実施例２に係る検索処理のフローチャートの一例を示す図である。
【図１６】図１６は、実施例２に係る上位階層ビットマップ生成処理のフローチャートの一例を示す図である。
【図１７】図１７は、基本ビットマップのハッシュ化を説明する図である。
【図１８】図１８は、ハッシュ化された基本ビットマップの復元を説明する図である。
【図１９】図１９は、コンピュータのハードウェア構成例を示す図である。
【図２０】図２０は、コンピュータで動作するプログラムの構成例を示す図である。
【図２１】図２１は、実施形態のシステムにおける装置の構成例を示す図である。
【発明を実施するための形態】
【００１３】
以下に、本願の開示する検索プログラム、情報処理装置および検索方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００１４】
［実施例１に係る検索処理］
図２は、実施例１に係る検索処理を示す模式図である。図２に示すように、検索処理は、符号化データに対する検索要求を受け付ける。検索要求の内容は、例えば、文字列または単語列である。そして、検索処理は、文字または単語の符号化データの元データでの出現位置を第１の軸とした第１のインデックス情報、および検索条件の内容に基づき、以下の処理を行う。すなわち、検索処理は、第１のインデックス情報の第１の軸を上位化した第２の軸を有する第２のインデックス情報を生成する。第２の軸は、第１の軸の項目ごとのビット列をそれぞれ１ビットに上位化（集約）するために用いられる軸である。ここでいう項目とは、符号化データの元データの区切り単位のことをいい、例えば６４ビットや１２８ビットなどのレジスタの容量に対応するが、実施例１では項目を６４ビットのレジスタ容量に対応するものとして説明する。ここでいう第２のインデックス情報は、例えば、検索要求の第１キーワードに対して生成される。ここでいう第１キーワードとは、例えば、検索要求の内容の最初のキーワード（文字または単語）のことをいう。そして、検索処理は、第２のインデックス情報を用いて、検索要求に対応した符号化テキストデータに対する検索を行う。
【００１５】
ここでは、検索要求として単語列「ａｂｃ」が受け付けられたとする。また、第１のインデックス情報には、単語が示す単語ＩＤに対して、符号化テキストデータの元データでの出現位置に出現ビットとして「１」が設定されている。一例として、単語「ａ」の単語ＩＤに対して、符号化テキストデータの元データでの出現位置「７０」、「９５」および「ｍｋ」などに出現ビットとして「１」が設定されている。単語「ｂ」の単語ＩＤに対して、符号化テキストデータの元データでの出現位置「７１」などに出現ビットとして「１」が設定されている。単語「ｃ」の単語ＩＤに対して、符号化テキストデータの元データでの出現位置「７２」などに出現ビットとして「１」が設定されている。
【００１６】
そして、検索処理は、第１のインデックス情報、および検索要求の内容に基づき、第１のインデックス情報の第１の軸を上位化した第２の軸を有する第２のインデックス情報を生成する。ここでは、検索処理は、検索要求の第１キーワード「ａ」に対して、第１のインデックス情報の第１の軸の項目（６４ビット）ごとのビット列をそれぞれ１ビットに上位化（集約）した第２の軸を有する第２のインデックス情報を生成する。一例として、検索処理は、第１キーワード「ａ」に対して、項目１（６４ビット〜１２７ビット）に対応するいずれかのビットに「１」が設定されているので、第２のインデックス情報の項目１に対応する出現位置「１」に出現ビットとして「１」を設定する。ここでは、第１のインデックス情報の第１の軸の項目１は、６４ビット〜１２７ビットのビット列を示す。第２のインデックス情報の第２の軸の項目１に対応する出現位置は、６４ビットに対応するビット位置を示す。６４ビットに対応するビット位置は、１ビット目としても良いし、６４ビット目としても良い。検索処理は、第１キーワード「ａ」に対して、項目ｍ（６４ｍビット〜６４ｍ＋６３ビット）に対応するいずれかのビットに「１」が設定されているので、第２のインデックス情報の項目ｍに対応する出現位置「ｍ」に出現ビットとして「１」を設定する。ここでは、第１のインデックス情報の第１の軸の項目ｍは、６４ｍビット〜６４ｍ＋６３ビットのビット列を示す。第２のインデックス情報の第２の軸の項目ｍに対応する出現位置は、６４ｍビットに対応するビット位置を示す。６４ｍビットに対応するビット位置は、ｍビット目としても良いし、６４ｍビット目としても良い。
【００１７】
そして、検索処理は、第２のインデックス情報を用いて、検索要求に対応した符号化テキストデータに対する検索を行う。ここでは、検索処理は、第２のインデックス情報を用いて、検索要求の第１キーワード「ａ」に対して「１」が設定された出現位置（項目Ｎｏ）を取得する。取得した出現位置（項目Ｎｏ）は、「１」および「ｍ」である。そして、検索処理は、第１のインデックス情報から、取得した項目Ｎｏに対応する領域を抽出し、抽出した領域から検索要求が示す単語列「ａｂｃ」を検索する。一例として、項目１に対応する領域では、単語「ａ」に対する出現ビットが出現位置「７０」に設定され、単語「ｂ」に対する出現ビットが出現位置「７１」に設定され、単語「ｃ」に対する出現ビットが出現位置「７２」に設定されている。したがって、項目１に対応する領域で、検索要求が示す単語列「ａｂｃ」が検索される。これに対して、項目ｍに対応する領域では、単語ａに対する出現ビットが出現位置「ｍｋ」に設定されているが、単語ｂに対する出現ビットが出現位置「ｍｋ＋１」に設定されていない。したがって、項目ｍに対応する領域で、検索要求が示す単語列「ａｂｃ」が検索されない。
【００１８】
このようにして、検索処理は、上位階層のインデックス情報により検索領域を絞り込むことで、符号化テキストデータから検索要求が示す単語列または文字列を高速に検索することができる。
【００１９】
［実施例１に係る符号化処理］
図３は、実施例１に係る符号化処理の流れの一例を示す図である。図３に示すように、符号化処理は、符号化対象のテキストデータＦ１に含まれる文字または単語を、順次、静的辞書Ｓ０を用いて符号化し、符号化されたコード（符号化コード）を符号化データに出力する。そして、符号化処理は、文字または単語のテキストデータＦ１での出現位置を第１の軸とした第１のインデックス情報を生成する。
【００２０】
ここでいう静的辞書Ｓ０とは、一般的な英語辞典、国語辞典や教科書などを基にして、文書中に出現する単語の出現頻度を特定し、出現頻度のより高い単語に対して、より短い符号を割り当てた辞書である。静的辞書Ｓ０には、それぞれの単語に対応する符号である静的コードがあらかじめ登録されている。
【００２１】
ここでいう第１のインデックス情報は、「ビットマップ型インデックス」といい、符号ＢＩで表わす。ここでいう文字とは、例えば、ＣＪＫ文字のことをいう。ここでいう単語とは、例えば、英単語のことをいう。なお、以降では、テキストデータＦ１が単語により構成されている場合について説明するが、これに限定されず、テキストデータＦ１は、文字により構成されている場合であっても良い。
【００２２】
ここで、ビットマップ型インデックスＢＩについて説明する。ビットマップ型インデックスＢＩは、符号化対象のテキストデータＦ１に含まれる単語を指定するポインタと単語のテキストデータＦ１内のオフセット（出現位置）での存否を示すビットを連結したビット列からなる。すなわち、ビットマップ型インデックスＢＩとは、符号化対象のテキストデータＦ１に含まれる単語について、オフセット（出現位置）ごとの存否をインデックス化したビットマップのことをいう。一例として、単語がテキストデータＦ１内のある出現位置に存在する場合には、出現位置に対応するオフセット（出現位置）の存否としてＯＮ、例えば２進数の「１」を示す出現ビットが設定される。単語がテキストデータ内のある出現位置に存在しない場合には、出現位置に対応するオフセット（出現位置）の存否としてＯＦＦ、例えば２進数の「０」が設定される。単語を指定するポインタとしては、例えば、単語の単語ＩＤが採用される。単語ＩＤは、単語そのものであっても良いし、単語の符号であっても良い。単語の符号は、符号化されたコード（符号化コード）のことをいい、一例として、静的コードに対応する。
【００２３】
例えば、図３に示すように、ビットマップ型インデックスＢＩのＸ軸はオフセット（出現位置）を表し、Ｙ軸は単語ＩＤを表す。つまり、ビットマップ型インデックスＢＩに含まれる各ビットマップは、単語ＩＤが示す単語の、オフセット（出現位置）ごとの存否を表す。なお、ビットマップ型インデックスＢＩに含まれる各ビットマップは、それぞれ「基本ビットマップ」というものとする。
【００２４】
ここでは、符号化対象のテキストデータＦ１の１０番目の位置に単語「ｉｎ」が出現するので、単語「ｉｎ」に対応する基本ビットマップの１０ビット目の出現位置にＯＮ、すなわち２進数の「１」を示す出現ビットが設定される。符号化対象のテキストデータＦ１の１１番目の位置に単語「ｍｙ」が出現するので、単語「ｍｙ」に対応する基本ビットマップの１１ビット目の出現位置にＯＮ、すなわち２進数の「１」を示す出現ビットが設定される。符号化対象のテキストデータＦ１の７０番目の位置に単語「ｉｎ」が出現するので、単語「ｉｎ」に対応する基本ビットマップの７０ビット目の出現位置にＯＮ、すなわち２進数の「１」を示す出現ビットが設定される。なお、ビットマップ型インデックスＢＩへの出現ビットは、テキストデータＦ１内の単語が符号化される都度、単語に対応する基本ビットマップの出現位置に設定される。
【００２５】
［符号化ファイルの構成例］
図４は、実施例１に係る符号化ファイルの構成例を示す図である。図４に示すように、符号化ファイルＦ２は、ヘッダ部と、符号化データと、トレーラ部とを有する。符号化データは、テキストデータＦ１の符号化された符号化コード群を記憶する。トレーラ部は、符号化処理が完了した後の情報やビットマップ型インデックスＢＩなどを記憶する。ヘッダ部は、例えば、符号化ファイルＦ２の生成に用いられた符号化アルゴリズムを識別する情報や、符号化に用いられたパラメータなどの情報を記憶し、例えば、トレーラ部に格納された各情報へのポインタなどが格納される。
【００２６】
［実施例１に係る検索処理］
図５Ａおよび図５Ｂは、実施例１に係る検索処理の流れの一例を示す図である。図５Ａおよび図５Ｂに示すように、検索処理は、文字または単語の符号化データの元データであるテキストデータＦ１の出現位置を第１の軸としたビットマップ型インデックスＢＩ、および検索クエリの内容に基づき、以下の処理を行う。すなわち、検索処理は、検索クエリの第１キーワードについて、ビットマップ型インデックスＢＩの第１の軸を上位化した第２の軸を有する上位階層のビットマップ（上位階層ビットマップ）を生成する。第２の軸は、第１の軸の６４ビットごとのビット列をそれぞれ１ビットに上位化（集約）した軸である。第１キーワードは、検索クエリの最初のキーワード（単語）である。そして、検索処理は、第１キーワードに対する上位階層ビットマップを用いて、検索クエリに対応した符号化データに対する検索を行う。
【００２７】
図５Ａに示すように、検索処理は、符号化データに対する検索クエリを受け付ける。ここでは、検索クエリの内容は、単語列「ｉｎ  ｆｒｏｎｔ  ｏｆ」である。
【００２８】
検索処理は、ビットマップ型インデックスＢＩを参照し、検索クエリが示す単語列の第１キーワードに対する上位階層ビットマップを生成する。
【００２９】
例えば、検索処理は、ビットマップ型インデックスＢＩから、第１キーワードに対する基本ビットマップの中の第１の６４ビット区間を抽出する。そして、検索処理は、抽出した第１の６４ビット区間のいずれかのビットに出現ビットが設定されている場合には、第１キーワードに対する上位階層ビットマップの第１の６４ビット区間を生成する。すなわち、検索処理は、第１キーワードに対する上位階層ビットマップの０ビット目の出現位置に出現ビットである「１」を設定する（ｓ１）。ここでは、第１キーワードは、「ｉｎ」である。「ｉｎ」に対する基本ビットマップの中の第１の６４ビット区間には、１０ビット目に出現ビットである「１」が設定されているので、「ｉｎ」に対する上位階層ビットマップの０ビット目に「１」が設定される。なお、検索処理は、抽出した第１の６４ビット区間のいずれのビットにも出現ビットが設定されていない場合には、第１キーワードに対する上位階層ビットマップの０ビット目の出現位置に「０」を設定する。
【００３０】
次に、検索処理は、ビットマップ型インデックスＢＩから、第１キーワードに対する基本ビットマップの中の第２の６４ビット区間を抽出する。そして、検索処理は、抽出した第２の６４ビット区間のいずれかのビットに出現ビットが設定されている場合には、第１キーワードに対する上位階層ビットマップの第２の６４ビット区間を生成する。すなわち、検索処理は、第１キーワードに対する上位階層ビットマップの１ビット目の出現位置に出現ビットである「１」を設定する（ｓ２）。ここでは、「ｉｎ」に対する基本ビットマップの中の第２の６４ビット区間には、７０ビット目に出現ビットである「１」が設定されているので、「ｉｎ」に対する上位階層ビットマップの１ビット目に出現ビットである「１」が設定される。なお、検索処理は、抽出した第２の６４ビット区間のいずれのビットにも出現ビットが設定されていない場合には、第１キーワードに対する上位階層ビットマップの１ビット目の出現位置に「０」を設定する。
【００３１】
このようにして、検索処理は、第１キーワードに対する基本ビットマップの６４ビット区間がなくなるまで、第１キーワードに対する上位階層ビットマップの６４ビット区間を生成する。
【００３２】
図５Ｂに示すように、検索処理は、第１キーワードに対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。そして、検索処理は、ビットマップ型インデックスＢＩから、取得した出現位置に対応する、第１キーワードに対する基本ビットマップの対象区間を抽出する（ｓ３）。ここでは、第１キーワードである「ｉｎ」に対する上位階層ビットマップの「０」ビット目に「１」が設定されているので、「０」ビット目に対応する６４ビット区間であって「ｉｎ」に対する基本ビットマップの中の第１の６４ビット区間が抽出される。また、第１キーワードである「ｉｎ」に対する上位階層ビットマップの「１」ビット目に「１」が設定されているので、「１」ビット目に対応する６４ビット区間であって「ｉｎ」に対する基本ビットマップの中の第２の６４ビット区間が抽出される。
【００３３】
そして、検索処理は、抽出した対象区間ごとに、各対象区間を１ビットだけ左シフトする（ｓ４）。ここでは、第１の６４ビット区間の１１ビット目に「１」が設定される。また、第２の６４ビット区間の７１ビット目に「１」が設定される。
【００３４】
そして、検索処理は、第１キーワードに対する上位階層ビットマップを補正する（ｓ５）。これは、対象区間の左シフトによりオーバーフローが発生した場合に対処する必要があるからである。すなわち、対象区間の最上位ビットに「１」が設定されている場合、対象区間の左シフトによりオーバーフローが発生する。このとき、オーバーフローにより「１」が設定されなくなったビットの出現位置に対する上位階層ビットマップの出現位置と、新たに「１」が設定されるビットの出現位置に対する上位階層ビットマップの出現位置を補正する。ここでは、対象区間の左シフトによりオーバーフローが発生しないので、「ｉｎ」に対する上位階層ビットマップは、補正されない。
【００３５】
そして、検索処理は、第１キーワードに対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。そして、検索処理は、ビットマップ型インデックスＢＩから、取得した出現位置に対応する、検索クエリの次のキーワードに対する基本ビットマップの対象区間を抽出する（ｓ６）。ここでは、検索クエリの次のキーワードは、「ｆｒｏｎｔ」である。「ｉｎ」に対する上位階層ビットマップの「０」ビット目に「１」が設定されているので、「０」ビット目に対応する６４ビット区間であって「ｆｒｏｎｔ」に対する基本ビットマップの中の第１の６４ビット区間が抽出される。また、「ｉｎ」に対する上位階層ビットマップの「１」ビット目に「１」が設定されているので、「１」ビット目に対応する６４ビット区間であって「ｆｒｏｎｔ」に対する基本ビットマップの中の第２の６４ビット区間が抽出される。
【００３６】
そして、検索処理は、抽出した対象区間ごとに、第１キーワードに対する基本ビットマップと検索クエリの次のキーワードに対する基本ビットマップとをＡＮＤ演算する（ｓ７）。ここでは、検索処理は、第１の６４ビット区間について、「ｉｎ」に対する基本ビットマップと検索クエリの次のキーワード「ｆｒｏｎｔ」に対する基本ビットマップとをＡＮＤ演算する。このＡＮＤ演算した結果が、「ｉｎ  ｆｒｏｎｔ」に対する基本ビットマップの中の第１の６４ビット区間である。「ｉｎ  ｆｒｏｎｔ」に対する基本ビットマップの中の第１の６４ビット区間では、全てのビットが「０」である。また、検索処理は、第２の６４ビット区間について、「ｉｎ」に対する基本ビットマップと検索クエリの次のキーワード「ｆｒｏｎｔ」に対する基本ビットマップとをＡＮＤ演算する。このＡＮＤ演算した結果が、「ｉｎ  ｆｒｏｎｔ」に対する基本ビットマップの中の第２の６４ビット区間である。「ｉｎ  ｆｒｏｎｔ」に対する基本ビットマップの中の第２の６４ビット区間では、７１ビット目が「１」である。
【００３７】
そして、検索処理は、ＡＮＤ演算した対象区間のうち、いずれかのビットが「１」を示す対象区間が有るか否かを判定する。ここでは、ＡＮＤ演算した対象区間は、「ｉｎ  ｆｒｏｎｔ」に対する基本ビットマップの中の第１の６４ビット区間および第２の６４ビット区間である。第１の６４ビット区間では、全てのビットが「０」である。第２の６４ビット区間では、７１ビット目が「１」である。したがって、検索処理は、いずれかのビットが「１」を示す対象区間として第２の６４ビット区間が有ると判定する。
【００３８】
そして、検索処理は、ＡＮＤ演算した対象区間のうち、いずれかのビットが「１」を示す対象区間を１ビットだけ左シフトする（ｓ８）。ここでは、検索処理は、「ｉｎ  ｆｒｏｎｔ」に対する基本ビットマップの中の第２の６４ビット区間を１ビットだけ左シフトする。この「ｉｎ  ｆｒｏｎｔ」に対する基本ビットマップの中の第２の６４ビット区間では、７２ビット目に「１」が設定される。
【００３９】
そして、検索処理は、第１キーワードと次のキーワードとの単語列に対する上位階層ビットマップを補正する（ｓ９）。これは、対象区間の左シフトによりオーバーフローが発生した場合に対処する必要があるからである。すなわち、対象区間の最上位ビットに「１」が設定されている場合、対象区間の左シフトによりオーバーフローが発生する。このとき、オーバーフローにより「１」が設定されなくなったビットの出現位置に対する上位階層ビットマップの出現位置と、新たに「１」が設定されるビットの出現位置に対する上位階層ビットマップの出現位置を補正する。ここでは、対象区間の左シフトによりオーバーフローが発生しないので、「ｉｎ  ｆｒｏｎｔ」に対する上位階層ビットマップは、補正されない。
【００４０】
そして、検索処理は、第１キーワードと次のキーワードとの単語列に対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。そして、検索処理は、ビットマップ型インデックスＢＩから、取得した出現位置に対応する、検索クエリのさらに次のキーワードに対する基本ビットマップの対象区間を抽出する（ｓ１０）。ここでは、検索クエリのさらに次のキーワードは、「ｏｆ」である。「ｉｎ  ｆｒｏｎｔ」に対する上位階層ビットマップの「１」ビット目に「１」が設定されているので、「１」ビット目に対応する６４ビット区間であって「ｏｆ」に対する基本ビットマップの中の第２の６４ビット区間が抽出される。
【００４１】
そして、検索処理は、抽出した対象区間ごとに、第１キーワードと次のキーワードとの単語列に対する基本ビットマップと検索クエリのさらに次のキーワードに対する基本ビットマップとをＡＮＤ演算する（ｓ１１）。ここでは、検索処理は、第２の６４ビット区間について、「ｉｎ  ｆｒｏｎｔ」に対する基本ビットマップと検索クエリのさらに次のキーワード「ｏｆ」に対する基本ビットマップとをＡＮＤ演算する。このＡＮＤ演算した結果が、「ｉｎ  ｆｒｏｎｔ  ｏｆ」に対する基本ビットマップの中の第２の６４ビット区間である。「ｉｎ  ｆｒｏｎｔ  ｏｆ」に対する基本ビットマップの中の第２の６４ビット区間では、７２ビット目が「１」である。
【００４２】
そして、検索処理は、ＡＮＤ演算した対象区間のうち、いずれかのビットが「１」を示す対象区間が有るか否かを判定する。ここでは、ＡＮＤ演算した対象区間は、「ｉｎ  ｆｒｏｎｔ  ｏｆ」に対する基本ビットマップの中の第２の６４ビット区間である。第２の６４ビット区間では、７２ビット目が「１」である。したがって、検索処理は、いずれかのビットが「１」を示す対象区間として第２の６４ビット区間が有ると判定する。すなわち、検索処理は、検索クエリ「ｉｎ  ｆｒｏｎｔ  ｏｆ」が存在する旨を検索結果として出力する。なお、検索処理は、どの６４ビット区間のどの出現位置に検索クエリが存在するかを検索結果として出力しても良い。ここでは、検索処理は、第２の６４ビット区間の７２ビット目に「ｉｎ  ｆｒｏｎｔ  ｏｆ」が存在する旨を検索結果として出力しても良い。
【００４３】
［実施例１に係る情報処理装置の構成］
図６は、実施例１に係る情報処理装置の構成の一例を示す機能ブロック図である。図６に示すように、情報処理装置１００は、符号化部１１０、検索部１２０および記憶部１３０を有する。
【００４４】
符号化部１１０は、図３で示した符号化処理を実行する処理部である。符号化部１１０は、ファイルリード部１１１、文字／単語取得部１１２、インデックス生成部１１３、符号化処理部１１４およびファイルライト部１１５を有する。
【００４５】
検索部１２０は、図５Ａおよび図５Ｂで示した検索処理を実行する処理部である。検索部１２０は、検索要求受付部１２１、上位階層ビットマップ生成部１２２、文字列／単語列検索部１２３および検索結果出力部１２４を有する。検索要求受付部１２１は、検索部の一例である。上位階層ビットマップ生成部１２２は、生成部の一例である。文字列／単語列検索部１２３は、検索部の一例である。
【００４６】
記憶部１３０は、例えばフラッシュメモリ（Ｆｌａｓｈ  Ｍｅｍｏｒｙ）やＦＲＡＭ（登録商標）（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの不揮発性の半導体メモリ素子などの記憶装置に対応する。記憶部１３０は、静的辞書１３１およびビットマップ型インデックス１３２を有する。
【００４７】
静的辞書１３１は、一般的な英語辞典、国語辞典や教科書などを基にして、テキストデータＦ１中に出現する文字または単語の出現頻度を特定し、出現頻度のより高い文字または単語に対して、より短い符号を割り当てた辞書である。静的辞書１３１には、それぞれの文字または単語に対応する符号である静的コードがあらかじめ登録されている。なお、静的辞書１３１は、静的辞書Ｓ０に対応する。
【００４８】
ビットマップ型インデックス１３２は、テキストデータＦ１に含まれる単語または文字について、オフセット（出現位置）ごとの存否をインデックス化した基本ビットマップの集合である。なお、ビットマップ型インデックス１３２は、ビットマップ型インデックスＢＩに対応する。ビットマップ型インデックス１３２の説明は、図３と同様であるので、その説明を省略する。
【００４９】
ファイルリード部１１１は、符号化対象のテキストデータＦ１を記憶領域に読み出す。
【００５０】
文字／単語取得部１１２は、テキストデータＦ１から文字または単語を取得する。例えば、文字／単語取得部１１２は、記憶領域に読み出したテキストデータＦ１に対して字句解析を行う。文字／単語取得部１１２は、字句解析した結果の文字または単語を、テキストデータＦ１の先頭から順番に取得する。文字／単語取得部１１２は、取得した文字または単語と、それぞれのテキストデータＦ１内の出現位置とを対応づけてインデックス生成部１１３に出力する。文字／単語取得部１１２は、取得した文字または単語を符号化処理部１１４に出力する。
【００５１】
インデックス生成部１１３は、ビットマップ型インデックス１３２を生成する。例えば、インデックス生成部１１３は、文字／単語取得部１１２から出力された文字について、当該文字に対応する基本ビットマップを、ビットマップ型インデックス１３２から抽出する。インデックス生成部１１３は、抽出した基本ビットマップに、テキストデータＦ１内の出現位置に対応するビットに出現ビットを設定する。また、インデックス生成部１１３は、文字／単語取得部１１２から出力された単語について、当該単語に対応する基本ビットマップを、ビットマップ型インデックス１３２から抽出する。インデックス生成部１１３は、抽出した基本ビットマップに、テキストデータＦ１内の出現位置に対応するビットに出現ビットを設定する。
【００５２】
符号化処理部１１４は、文字または単語を符号化する。例えば、符号化処理部１１４は、文字／単語取得部１１２から出力された文字を、静的辞書１３１に登録されている静的コードに符号化する。また、符号化処理部１１４は、文字／単語取得部１１２から出力された単語を、静的辞書１３１に登録されている静的コードに符号化する。
【００５３】
ファイルライト部１１５は、符号化処理部１１４によって符号化された符号化コードを符号化ファイルＦ２の符号化データに格納する。ファイルライト部１１５は、ビットマップ型インデックス１３２を符号化ファイルＦ２のトレーラ部に書き込む。
【００５４】
検索要求受付部１２１は、符号化データに対する検索要求を受け付ける。例えば、検索要件受付部１２１は、検索要求として検索対象の文字列または検索対象の単語列を受け付ける。なお、検索クエリは、検索要求の一例である。検索要求受付部１２１は、検索要求として文字と単語とが混在した単語列を受け付けても良い。
【００５５】
上位階層ビットマップ生成部１２２は、ビットマップ型インデックス１３２、および検索要求の内容に基づき、第１の軸を上位化した第２の軸を有する上位階層ビットマップを生成する。なお、第２の軸は、第１の軸の６４ビットごとのビット列をそれぞれ１ビットに上位化（集約）した軸である。例えば、上位階層ビットマップ生成部１２２は、ビットマップ型インデックス１３２から、検索要求の第１キーワードに対する基本ビットマップの中の第ｎの６４ビット区間を抽出する。なお、ｎは、１以上の自然数である。上位階層ビットマップ生成部１２２は、抽出した第ｎの６４ビット区間のいずれかのビットに出現ビットが設定されている場合には、第１キーワードに対する上位階層ビットマップの中の第ｎの６４ビット区間を集約したビットに出現ビット「１」を設定する。上位階層ビットマップ生成部１２２は、抽出した第ｎの６４ビット区間のいずれのビットにも出現ビットが設定されていない場合には、第１キーワードに対する上位階層ビットマップの第ｎの６４ビット区間を集約したビットに「０」を設定する。そして、上位階層ビットマップ生成部１２２は、ｎが６４ビット区間の最終区間になるまで、生成処理を繰り返す。
【００５６】
文字列／単語列検索部１２３は、第１キーワードに対する上位階層ビットマップを用いて、検索要求としての検索対象の文字列または検索要求としての検索対象の単語列に対応した、符号化データに対する検索を行う。
【００５７】
例えば、文字列／単語列検索部１２３は、上位階層ビットマップ生成部１２２によって生成された、検索対象の第１キーワードに対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。文字列／単語列検索部１２３は、ビットマップ型インデックス１３２から、取得した出現位置に対応する、第１キーワードに対する基本ビットマップの６４ビット区間を抽出する。
【００５８】
そして、文字列／単語列検索部１２３は、抽出した第１キーワードに対する基本ビットマップの６４ビット区間を１ビットだけ左シフトする。文字列／単語列検索部１２３は、第１キーワードに対する上位階層ビットマップを補正する。これは、６４ビット区間の左シフトによりオーバーフローが発生した場合に上位階層ビットマップを補正する必要があるからである。そして、文字列／単語列検索部１２３は、補正された、第１キーワードに対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。文字列／単語列検索部１２３は、ビットマップ型インデックス１３２から、取得した出現位置に対応する、次のキーワードに対する基本ビットマップの６４ビット区間を抽出する。文字列／単語列検索部１２３は、抽出した６４ビット区間ごとに、第１キーワードに対する基本ビットマップと次のキーワードに対する基本ビットマップとをＡＮＤ演算する。
【００５９】
そして、文字列／単語列検索部１２３は、ＡＮＤ演算した６４ビット区間のうち、いずれかのビットが出現ビットを示す６４ビット区間が有るか否かを判定する。そして、文字列／単語列検索部１２３は、該当する６４ビット区間が無い場合には、検索対象が存在しないと判定する。文字列／単語列検索部１２３は、該当する６４ビット区間が有る場合には、さらに、現に処理されたキーワードと次のキーワードとを含む単語列または文字列の検索処理を繰り返す。そして、文字列／単語列検索部１２３は、検索対象の次のキーワード（単語または文字）がなくなると、検索対象が存在すると判定する。
【００６０】
検索結果出力部１２４は、検索結果を出力する。例えば、検索結果出力部１２４は、文字列／単語列検索部１２３によって検索対象が存在すると判定された場合には、検索結果として検索対象が存在する旨を出力する。検索結果出力部１２４は、文字列／単語列検索部１２３によって検索対象が存在しないと判定された場合には、検索結果として検索対象が存在しない旨を出力する。
【００６１】
［実施例１に係る符号化処理の処理手順］
図６に示した符号化部１１０の処理手順について、図７を参照して説明する。図７は、実施例１に係る符号化処理のフローチャートの一例を示す図である。
【００６２】
図７に示すように、符号化部１１０は、前処理を実行する（ステップＳ１１）。例えば、符号化部１１０は、各種記憶領域を記憶部１３０に確保する。そして、符号化部１１０は、符号化対象のファイルを読み出し、読出用の記憶領域にテキストデータＦ１を格納する（ステップＳ１２）。
【００６３】
そして、符号化部１１０は、読出用の記憶領域から文字または単語を取得する（ステップＳ１３）。例えば、符号化部１１０は、読出用の記憶領域に格納されたテキストデータＦ１を字句解析し、字句解析した結果の文字または単語を、テキストデータＦ１の先頭から順番に取得する。
【００６４】
符号化部１１０は、取得対象は文字であるか否かを判定する（ステップＳ１４）。取得対象は文字であると判定した場合には（ステップＳ１４；Ｙｅｓ）、符号化部１１０は、取得した文字に対応する基本ビットマップの、出現位置に対するビットに出現ビットを設定する（ステップＳ１５）。例えば、符号化部１１０は、取得した文字に対応する基本ビットマップをビットマップ型インデックス１３２から抽出する。符号化部１１０は、抽出した基本ビットマップに、テキストデータＦ１内の、取得した文字の出現位置に対応するビットに出現ビットを設定する。
【００６５】
符号化部１１０は、取得した文字を、静的辞書１３１に登録されている静的コードに符号化する（ステップＳ１６）。そして、符号化部１１０は、ステップＳ１９に移行する。
【００６６】
一方、取得対象は文字でないと判定した場合には（ステップＳ１４；Ｎｏ）、符号化部１１０は、取得対象は単語であると判定し、単語に対応する基本ビットマップの、出現位置に対するビットに出現ビットを設定する（ステップＳ１７）。例えば、符号化部１１０は、取得した単語に対応する基本ビットマップをビットマップ型インデックス１３２から抽出する。符号化部１１０は、抽出した基本ビットマップに、テキストデータＦ１内の、取得した単語の出現位置に対応するビットに出現ビットを設定する。
【００６７】
符号化部１１０は、取得した単語を、静的辞書１３１に登録されている静的コードに符号化する（ステップＳ１８）。そして、符号化部１１０は、ステップＳ１９に移行する。
【００６８】
ステップＳ１９において、符号化部１１０は、ファイルの終点か否かを判定する（ステップＳ１９）。ファイルの終点でないと判定した場合には（ステップＳ１９；Ｎｏ）、符号化部１１０は、次の文字または単語を取得すべく、ステップＳ１３に移行する。
【００６９】
一方、ファイルの終点であると判定した場合には（ステップＳ１９；Ｙｅｓ）、符号化部１１０は、符号化処理を終了する。
【００７０】
［実施例１に係る検索処理の処理手順］
図６に示した検索部１２０の処理手順について、図８を参照して説明する。図８は、実施例１に係る検索処理のフローチャートの一例を示す図である。なお、検索部１２０の処理手順の一例として、検索クエリが単語列である場合を説明するものとする。
【００７１】
図８に示すように、検索部１２０は、検索クエリを受け付けたか否かを判定する（ステップＳ２１）。検索クエリを受け付けていないと判定した場合には（ステップＳ２１；Ｎｏ）、検索部１２０は、検索クエリを受け付けるまで、判定処理を繰り返す。
【００７２】
一方、検索クエリを受け付けたと判定した場合には（ステップＳ２１；Ｙｅｓ）、検索部１２０は、検索クエリの第１キーワード（今回の対象）に対する上位階層ビットマップ生成処理を実行する（ステップＳ２２）。なお、上位階層ビットマップ生成処理のフローチャートは、後述する。
【００７３】
検索部１２０は、上位階層ビットマップ生成処理によって生成された上位階層ビットマップに設定された出現ビットに対応する対象区間であって第１キーワード（今回の対象）に対する基本ビットマップの対象区間を抽出する（ステップＳ２３）。６４ビット区間は、対象区間の一例である。
【００７４】
検索部１２０は、今回の対象に対する基本ビットマップの対象区間を１ビットだけ左シフトする（ステップＳ２４）。そして、検索部１２０は、今回の対象に対する上位階層ビットマップを補正する（ステップＳ２５）。これは、対象区間の左シフトによりオーバーフローが発生した場合に上位階層ビットマップを補正する必要があるからである。
【００７５】
検索部１２０は、補正された上位階層ビットマップに設定された出現ビットに対応する対象区間であって次のキーワードに対する基本ビットマップの対象区間を抽出する（ステップＳ２６）。
【００７６】
そして、検索部１２０は、対象区間ごとに、今回の対象と次のキーワードとの基本ビットマップをＡＮＤ演算する（ステップＳ２７）。検索部１２０は、演算結果の対象区間のうち、出現ビットが設定された対象区間が有るか否かを判定する（ステップＳ２８）。出現ビットを持つ対象区間が無いと判定した場合には（ステップＳ２８；Ｎｏ）、検索部１２０は、今回の対象と次のキーワードとの単語列が無い旨を検索結果として出力する（ステップＳ２９）。そして、検索部１２０は、検索処理を終了する。
【００７７】
一方、出現ビットを持つ対象区間が有ると判定した場合には（ステップＳ２８；Ｙｅｓ）、検索部１２０は、今回の対象と次のキーワードとの単語列が有ると判断し、検索クエリの終点であるか否かを判定する（ステップＳ３０）。検索クエリの終点でないと判定した場合には（ステップＳ３０；Ｎｏ）、検索部１２０は、今回の対象と次のキーワードとの単語列を今回の対象とする（ステップＳ３１）。そして、検索部１２０は、今回の対象と次のキーワードとの単語列を検索すべく、ステップＳ２４に移行する。
【００７８】
一方、検索クエリの終点であると判定した場合には（ステップＳ３０；Ｙｅｓ）、検索部１２０は、今回の対象と次のキーワードとの単語列が有る旨を検索結果として出力する（ステップＳ３２）。そして、検索部１２０は、検索処理を終了する。
【００７９】
［実施例１に係る上位階層ビットマップ生成処理の処理手順］
図９は、実施例１に係る上位階層ビットマップ生成処理のフローチャートの一例を示す図である。
【００８０】
図９に示すように、検索部１２０は、インデックスｉに１を設定する（ステップＳ４１）。検索部１２０は、ビットマップ型インデックス１３２から、第１キーワードに対する基本ビットマップの中の第ｉの区間を抽出する（ステップＳ４２）。
【００８１】
検索部１２０は、いずれかのビットに出現ビットが設定されているか否かを判定する（ステップＳ４３）。いずれかのビットに出現ビットが設定されていないと判定した場合には（ステップＳ４３；Ｎｏ）、検索部１２０は、ステップＳ４５に移行する。
【００８２】
一方、いずれかのビットに出現ビットが設定されていると判定した場合には（ステップＳ４３；Ｙｅｓ）、検索部１２０は、第１キーワードに対する上位階層ビットマップのｉ―１ビット目に出現ビットを設定する（ステップＳ４４）。つまり、検索部１２０は、第１キーワードに対する上位階層ビットマップの第ｉの区間を設定する。そして、検索部１２０は、ステップＳ４５に移行する。
【００８３】
ステップＳ４５において、検索部１２０は、インデックスｉが最終区間のＮであるか否かを判定する（ステップＳ４５）。インデックスｉが最終区間のＮでないと判定した場合には（ステップＳ４５；Ｎｏ）、検索部１２０は、インデックスｉに１を加算する（ステップＳ４６）。そして、検索部１２０は、次の区間の処理をすべく、ステップＳ４２に移行する。
【００８４】
一方、インデックスｉが最終区間のＮであると判定した場合には（ステップＳ４５；Ｙｅｓ）、検索部１２０は、上位階層ビットマップ生成処理を終了する。
【００８５】
［実施例１の効果］
このようにして、上記実施例１では、検索部１２０は、符号化データに対する検索要求を受け付ける。検索部１２０は、符号化データのインデックス情報であって、文字または単語の符号化データの元データ内での出現位置を第１の軸とした第１のインデックス情報、および検索要求の内容に基づき、第１の軸を上位化した第２の軸を有する第２のインデックス情報を生成する。そして、検索部１２０は、第２のインデックス情報を用いて、検索要求に対応した符号化データに対する検索を行う。かかる構成によれば、検索部１２０は、検索要求の内容に応じた第２のインデックス情報を生成してから検索を行うことにより、検索要求の内容に応じた検索の絞り込みを高速に行うことができる。さらに、検索部１２０は、出現位置を軸とした第１のインデックス情報を用いることで、検索要求が単語列または文字列を示す場合には、検索要求が示す単語列または文字列を高速に検索することができる。さらに、検索部１２０は、レジスタの容量単位などの粒度での検索を、演算量を抑えて行うことができる。
【００８６】
また、上記実施例１では、検索部１２０は、検索要求の第１のキーワードについて、第１のインデックス情報を用いて、第１の軸を上位化した第２の軸を有する第２のインデックス情報を生成する。かかる構成によれば、検索部１２０は、検索要求の第１のキーワードに応じた第２のインデックス情報を生成してから検索を行うことにより、検索要求の検索の範囲を高速に絞り込むことができる。この結果、検索部１２０は、検索の演算量を抑えることができる。
【実施例２】
【００８７】
ところで、実施例１では、検索部１２０は、第１のインデックス情報のレジスタ容量に基づき、第１の軸を上位化して第２のインデックス情報を生成すると説明した。しかしながら、検索部１２０は、これに限定されず、第１のインデックス情報の所定の区切り単位に基づき、第１の軸を上位化して第２のインデックス情報を生成しても良い。所定の区切り単位は、符号化データの元データであるテキストデータＦ１の区切り単位であり、例えば、ファイル、ブロック、章や文章が挙げられる。なお、以降、所定の区切りを「項目」というものとする。
【００８８】
そこで、実施例２では、第１のインデックス情報の項目単位に基づき、第１の軸を上位化して第２のインデックス情報を生成する場合を説明する。
【００８９】
［実施例２に係る検索処理］
図１０は、実施例２に係る検索処理を示す模式図である。図１０に示すように、検索処理は、符号化データに対する検索要求を受け付ける。検索要求の内容は、例えば、文字列または単語列である。そして、検索処理は、文字または単語の符号化データの元データでの出現位置を第１の軸とした第１のインデックス情報、および検索条件の内容に基づき、以下の処理を行う。すなわち、検索処理は、第１のインデックス情報の第１の軸を項目ごとに上位化した第２の軸を有する第２のインデックス情報を生成する。第１のインデックス情報には、項目に対して、符号化テキストデータの元データでの先頭位置に出現ビットとして「１」が設定されている。したがって、検索処理は、出現ビットが設定された位置から次の出現ビットの１ビット前までを１つの項目と判断し、第１の軸を項目ごとに上位化した第２の軸を有する第２のインデックス情報を生成する。第２の軸は、第１の軸の項目ごとのビット列をそれぞれ１ビットに上位化（集約）するために用いられる軸である。ここでいう第２のインデックス情報は、例えば、検索要求の第１キーワードに対して生成される。ここでいう第１キーワードとは、例えば、検索要求の内容の最初のキーワード（文字または単語）のことをいう。そして、検索処理は、第２のインデックス情報を用いて、検索要求に対応した符号化テキストデータに対する検索を行う。
【００９０】
ここでは、検索要求として単語列「ａｂｃ」が受け付けられたとする。また、第１のインデックス情報には、単語が示す単語ＩＤに対して、符号化テキストデータの元データでの出現位置に出現ビットとして「１」が設定されている。一例として、単語「ａ」の単語ＩＤに対して、符号化テキストデータの元データでの出現位置「７０」、「９５」および「ｍｋ」などに出現ビットとして「１」が設定されている。単語「ｂ」の単語ＩＤに対して、符号化テキストデータの元データでの出現位置「７１」などに出現ビットとして「１」が設定されている。単語「ｃ」の単語ＩＤに対して、符号化テキストデータの元データでの出現位置「７２」などに出現ビットとして「１」が設定されている。
【００９１】
そして、検索処理は、第１のインデックス情報、および検索要求の内容に基づき、第１のインデックス情報の第１の軸を上位化した第２の軸を有する第２のインデックス情報を生成する。ここでは、検索処理は、第１のインデックス情報の項目に対する出現ビットを参照して、検索要求の第１キーワード「ａ」に対して、第１のインデックス情報の第１の軸の項目ごとのビット列をそれぞれ１ビットに上位化（集約）した第２の軸を有する第２のインデックス情報を生成する。一例として、検索処理は、第１キーワード「ａ」に対して、項目１に対応するいずれかのビットに「１」が設定されているので、第２のインデックス情報の項目１に対応する出現位置「１」に出現ビットとして「１」を設定する。検索処理は、第１キーワード「ａ」に対して、項目ｍに対応するいずれかのビットに「１」が設定されているので、第２のインデックス情報の項目ｍに対応する出現位置「ｍ」に出現ビットとして「１」を設定する。
【００９２】
そして、検索処理は、第２のインデックス情報を用いて、検索要求に対応した符号化テキストデータに対する検索を行う。ここでは、検索処理は、第２のインデックス情報を用いて、検索要求の第１キーワード「ａ」に対して「１」が設定された出現位置（項目Ｎｏ）を取得する。取得した出現位置（項目Ｎｏ）は、「１」および「ｍ」である。そして、検索処理は、第１のインデックス情報から、取得した項目Ｎｏに対応する領域を抽出し、抽出した領域から検索要求が示す単語列「ａｂｃ」を検索する。一例として、項目１に対応する領域では、単語「ａ」に対する出現ビットが出現位置「７０」に設定され、単語「ｂ」に対する出現ビットが出現位置「７１」に設定され、単語「ｃ」に対する出現ビットが出現位置「７２」に設定されている。したがって、項目１に対応する領域で、検索要求が示す単語列「ａｂｃ」が検索される。これに対して、項目ｍに対応する領域では、単語ａに対する出現ビットが出現位置「ｍｋ」に設定されているが、単語ｂに対する出現ビットが出現位置「ｍｋ＋１」に設定されていない。したがって、項目ｍに対応する領域で、検索要求が示す単語列「ａｂｃ」が検索されない。
【００９３】
このようにして、検索処理は、第１のインデックス情報の項目単位に基づく上位階層の第２のインデックス情報により検索領域を絞り込むことで、符号化テキストデータから検索要求が示す単語列または文字列を高速に検索することができる。
【００９４】
［実施例２に係る符号化処理］
図１１は、実施例２に係る符号化処理の流れの一例を示す図である。図１１に示すように、符号化処理は、符号化対象のテキストデータＦ１に含まれる文字または単語を、順次、静的辞書Ｓ０を用いて符号化し、符号化されたコード（符号化コード）を符号化データに出力する。そして、符号化処理は、文字または単語のテキストデータＦ１での出現位置を第１の軸とした第１のインデックス情報を生成する。そして、符号化処理は、第１のインデックス情報を生成する際、項目に対する第１の軸について、各項目の先頭位置を示す出現位置に出現ビットを設定する。
【００９５】
ここでいう静的辞書Ｓ０とは、一般的な英語辞典、国語辞典や教科書などを基にして、文書中に出現する単語の出現頻度を特定し、出現頻度のより高い単語に対して、より短い符号を割り当てた辞書である。静的辞書Ｓ０には、それぞれの単語に対応する符号である静的コードがあらかじめ登録されている。
【００９６】
ここでいう第１のインデックス情報は、「ビットマップ型インデックス」といい、符号ＢＩで表わす。ここでいう文字とは、例えば、ＣＪＫ文字のことをいう。ここでいう単語とは、例えば、英単語のことをいう。なお、以降では、テキストデータＦ１が単語により構成されている場合について説明するが、これに限定されず、テキストデータＦ１は、文字により構成されている場合であっても良い。
【００９７】
ここで、ビットマップ型インデックスＢＩについて説明する。ビットマップ型インデックスＢＩは、符号化対象のテキストデータＦ１に含まれる単語を指定するポインタと単語のテキストデータＦ１内のオフセット（出現位置）での存否を示すビットを連結したビット列からなる。すなわち、ビットマップ型インデックスＢＩとは、符号化対象のテキストデータＦ１に含まれる単語について、オフセット（出現位置）ごとの存否をインデックス化したビットマップのことをいう。一例として、単語がテキストデータＦ１内のある出現位置に存在する場合には、出現位置に対応するオフセット（出現位置）の存否としてＯＮ、例えば２進数の「１」を示す出現ビットが設定される。単語がテキストデータ内のある出現位置に存在しない場合には、出現位置に対応するオフセット（出現位置）の存否としてＯＦＦ、例えば２進数の「０」が設定される。単語を指定するポインタとしては、例えば、単語の単語ＩＤが採用される。単語ＩＤは、単語そのものであっても良いし、単語の符号であっても良い。単語の符号は、符号化されたコード（符号化コード）のことをいい、一例として、静的コードに対応する。
【００９８】
例えば、図１１に示すように、ビットマップ型インデックスＢＩのＸ軸はオフセット（出現位置）を表し、Ｙ軸は単語ＩＤを表す。つまり、ビットマップ型インデックスＢＩに含まれる各ビットマップは、単語ＩＤが示す単語の、オフセット（出現位置）ごとの存否を表す。なお、ビットマップ型インデックスＢＩに含まれる各ビットマップは、それぞれ「基本ビットマップ」というものとする。
【００９９】
ここでは、符号化対象のテキストデータＦ１の１０番目の位置に単語「ｉｎ」が出現するので、単語「ｉｎ」に対応する基本ビットマップの１０ビット目の出現位置にＯＮ、すなわち２進数の「１」を示す出現ビットが設定される。符号化対象のテキストデータＦ１の１１番目の位置に単語「ｍｙ」が出現するので、単語「ｍｙ」に対応する基本ビットマップの１１ビット目の出現位置にＯＮ、すなわち２進数の「１」を示す出現ビットが設定される。符号化対象のテキストデータＦ１の７０番目の位置に単語「ｉｎ」が出現するので、単語「ｉｎ」に対応する基本ビットマップの７０ビット目の出現位置にＯＮ、すなわち２進数の「１」を示す出現ビットが設定される。そして、７０ビット目から「項目１」となるので、項目に対応する基本ビットマップの７０ビット目の出現位置にＯＮ、すなわち２進数の「１」を示す出現ビットが設定される。なお、ビットマップ型インデックスＢＩへの出現ビットは、テキストデータＦ１内の単語が符号化される都度、単語に対応する基本ビットマップの出現位置に設定される。また、ビットマップ型インデックスＢＩへの出現ビットは、テキストデータＦ１内の単語が項目の先頭である場合に、項目に対応する基本ビットマップの出現位置に設定される。
【０１００】
［実施例２に係る検索処理］
図１２Ａおよび図１２Ｂは、実施例２に係る検索処理の流れの一例を示す図である。図１２Ａおよび図１２Ｂに示すように、検索処理は、ビットマップ型インデックスＢＩ、および、検索クエリの、テキストデータＦ１の区切り単位を含む内容に基づき、以下の処理を行う。すなわち、検索処理は、ビットマップ型インデックスＢＩの第１の軸を上位化（集約）した第２の軸を有する上位階層ビットマップを生成する。第２の軸は、第１の軸の、区切り単位ごとのビット列をそれぞれ１ビットに上位化（集約）した軸である。第１キーワードは、検索クエリの最初のキーワード（単語）である。そして、検索処理は、第１キーワードに対する上位階層ビットマップを用いて、検索クエリに対応した符号化データに対する検索を行う。
【０１０１】
なお、以降、第２の軸は、第１の軸の、ファイルまたはブロックごとのビット列をそれぞれ１ビットに上位化（集約）したものとして説明する。
【０１０２】
図１２Ａに示すように、検索処理は、符号化データに対する検索クエリを受け付ける。ここでは、検索クエリの内容は、単語列「ｉｎ  ｆｒｏｎｔ  ｏｆ」である。
【０１０３】
検索処理は、ビットマップ型インデックスＢＩを参照し、検索クエリが示す単語列の第１キーワードに対する上位階層ビットマップを生成する。
【０１０４】
例えば、検索処理は、ビットマップ型インデックスＢＩから、第１キーワードに対する基本ビットマップの中の第１の６４ビット区間を抽出する。そして、検索処理は、抽出した第１の６４ビット区間のいずれかのビットに出現ビットが設定されている場合には、オフセットテーブルＴ０に基づいて、出現ビットが設定されている位置（オフセット位置）に対応付けられるファイルまたはブロックＮｏを特定する（ｓ２１）。ここでいうオフセットテーブルＴ０とは、テキストデータＴ１内の区切りを、ファイルまたはブロックＮｏとテキストデータＴ１内のオフセット位置とで表わしたテーブルである。ここでは、第１キーワードは、「ｉｎ」である。「ｉｎ」に対する基本ビットマップの中の第１の６４ビット区間には、１０ビット目に出現ビットである「１」が設定されている。検索処理は、オフセットテーブルＴ０に基づいて、出現ビットが設定されている１０ビット目に対応付けられるファイルまたはブロックＮｏ「１」を特定する。
【０１０５】
そして、検索処理は、第１キーワードに対する上位階層ビットマップの、特定したファイルまたはブロックＮｏの区間を生成する。すなわち、検索処理は、第１キーワードに対する上位階層ビットマップの、特定したファイルまたはブロックＮｏに対応する出現位置に出現ビットである「１」を設定する（ｓ２２）。ここでは、ファイルまたはブロックＮｏ「１」が特定されたので、「ｉｎ」に対する上位階層ビットマップの１ビット目に出現ビットである「１」が設定される。
【０１０６】
同様に、検索処理は、第１キーワードに対する基本ビットマップの６４ビット区間がなくなるまで、順次６４ビット区間を抽出する。そして、検索処理は、抽出した６４ビット区間のいずれかのビットに出現ビットが設定されている場合には、オフセットテーブルＴ０に基づいて、出現ビットが設定されているオフセット位置に対応付けられるファイルまたはブロックＮｏを特定する。そして、検索処理は、第１キーワードに対する上位階層ビットマップの、特定したファイルまたはブロックＮｏの区間を生成する。すなわち、検索処理は、第１キーワードに対する上位階層ビットマップの、特定したファイルまたはブロックＮｏに対応する出現位置に出現ビットである「１」を設定する。
【０１０７】
図１２Ｂに示すように、検索処理は、第１キーワードに対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。そして、検索処理は、オフセットテーブルＴ０に基づいて、出現ビットの出現位置に対応付けられるファイルまたはブロックＮｏを特定し（ｓ２３）、特定したファイルまたはブロックＮｏに対応付けられたオフセット位置を特定する。そして、検索処理は、ビットマップ型インデックスＢＩから、特定したオフセット位置に対応する、第１キーワードに対する基本ビットマップの対象区間を抽出する（ｓ２４）。ここでは、「ｉｎ」に対する上位階層ビットマップの「１」ビット目に「１」が設定されているので、検索処理は、「１」ビット目に対応するファイルまたはブロックＮｏ「１」を特定する。そして、検索処理は、特定したファイルまたはブロックＮｏ「１」に対応付けられたオフセット位置「２０１」を特定する。そして、検索処理は、ビットマップ型インデックスＢＩから特定したオフセット位置「２０１」に対応するファイルまたはブロックＮｏ「１」の対象区間を抽出する。なお、ファイルまたはブロックＮｏ「１」の対象区間は、「ｉｎ」に対する基本ビットマップの０〜２０１に対応し、１０ビット目と７０ビット目に出現ビットが設定されている。
【０１０８】
そして、検索処理は、抽出した対象区間ごとに、各対象区間を１ビットだけ左シフトする（ｓ２５）。ここでは、ファイルまたはブロックＮｏ「１」の対象区間の１１ビット目と７１ビット目にそれぞれ「１」が設定される。
【０１０９】
そして、検索処理は、第１キーワードに対する上位階層ビットマップを補正する（ｓ２６）。これは、対象区間の左シフトによりオーバーフローが発生した場合に対処する必要があるからである。すなわち、対象区間の最上位ビットに「１」が設定されている場合、対象区間の左シフトによりオーバーフローが発生する。このとき、オーバーフローにより「１」が設定されなくなったビットの出現位置に対する上位階層ビットマップの出現位置と、新たに「１」が設定されるビットの出現位置に対する上位階層ビットマップの出現位置を補正する。ここでは、対象区間の左シフトによりオーバーフローが発生しないので、「ｉｎ」に対する上位階層ビットマップは、補正されない。
【０１１０】
そして、検索処理は、第１キーワードに対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。そして、検索処理は、ビットマップ型インデックスＢＩから、取得した出現位置に対応する、検索クエリの次のキーワードに対する基本ビットマップの対象区間を抽出する（ｓ２７）。ここでは、検索クエリの次のキーワードは、「ｆｒｏｎｔ」である。「ｉｎ」に対する上位階層ビットマップの「１」ビット目に「１」が設定されているので、検索処理は、「１」ビット目に対応する対象区間であって「ｆｒｏｎｔ」に対する基本ビットマップの中のファイルまたはブロックＮｏ「１」の対象区間を抽出する。なお、「ｆｒｏｎｔ」に対する基本ビットマップの中のファイルまたはブロックＮｏ「１」の対象区間は、「ｆｒｏｎｔ」に対する基本ビットマップの０〜２０１に対応し、７１ビット目に出現ビットが設定されている。
【０１１１】
そして、検索処理は、抽出した対象区間ごとに、第１キーワードに対する基本ビットマップと検索クエリの次のキーワードに対する基本ビットマップとをＡＮＤ演算する（ｓ２８）。ここでは、検索処理は、ファイルまたはブロックＮｏ「１」の対象区間について、「ｉｎ」に対する基本ビットマップと検索クエリの次のキーワード「ｆｒｏｎｔ」に対する基本ビットマップとをＡＮＤ演算する。このＡＮＤ演算した結果が、「ｉｎ  ｆｒｏｎｔ」に対する基本ビットマップの中のファイルまたはブロックＮｏ「１」の対象区間である。ファイルまたはブロックＮｏ「１」の対象区間では、１１ビット目が「０」であり、７１ビット目が「１」である。
【０１１２】
そして、検索処理は、ＡＮＤ演算した対象区間のうち、いずれかのビットが「１」を示す対象区間が有るか否かを判定する。ここでは、ＡＮＤ演算した対象区間は、「ｉｎ  ｆｒｏｎｔ」に対する基本ビットマップの中のファイルまたはブロックＮｏ「１」の対象区間である。ファイルまたはブロックＮｏ「１」の対象区間では、７１ビット目が「１」である。したがって、検索処理は、いずれかのビットが「１」を示す対象区間としてファイルまたはブロックＮｏ「１」の対象区間が有ると判定する。
【０１１３】
そして、検索処理は、ＡＮＤ演算した対象区間のうち、いずれかのビットが「１」を示す対象区間を１ビットだけ左シフトする（ｓ２９）。ここでは、検索処理は、「ｉｎ  ｆｒｏｎｔ」に対する基本ビットマップの中のファイルまたはブロックＮｏ「１」の対象区間を１ビットだけ左シフトする。この「ｉｎ  ｆｒｏｎｔ」に対する基本ビットマップの中のファイルまたはブロックＮｏ「１」の対象区間では、７２ビット目に「１」が設定される。
【０１１４】
そして、検索処理は、第１キーワードと次のキーワードとの単語列に対する上位階層ビットマップを補正する（ｓ３０）。これは、対象区間の左シフトによりオーバーフローが発生した場合に対処する必要があるからである。すなわち、対象区間の最上位ビットに「１」が設定されている場合、対象区間の左シフトによりオーバーフローが発生する。このとき、オーバーフローにより「１」が設定されなくなったビットの出現位置に対する上位階層ビットマップの出現位置と、新たに「１」が設定されるビットの出現位置に対する上位階層ビットマップの出現位置を補正する。ここでは、対象区間の左シフトによりオーバーフローが発生しないので、「ｉｎ  ｆｒｏｎｔ」に対する上位階層ビットマップは、補正されない。
【０１１５】
そして、検索処理は、第１キーワードと次のキーワードとの単語列に対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。そして、検索処理は、ビットマップ型インデックスＢＩから、取得した出現位置に対応する、検索クエリのさらに次のキーワードに対する基本ビットマップの対象区間を抽出する（ｓ３１）。ここでは、検索クエリのさらに次のキーワードは、「ｏｆ」である。「ｉｎ  ｆｒｏｎｔ」に対する上位階層ビットマップの「１」ビット目に「１」が設定されているので、検索処理は、「１」ビット目に対応する対象区間であって「ｆｒｏｎｔ」に対する基本ビットマップの中のファイルまたはブロックＮｏ「１」の対象区間を抽出する。なお、「ｏｆ」に対する基本ビットマップの中のファイルまたはブロックＮｏ「１」の対象区間は、「ｏｆ」に対する基本ビットマップの０〜２０１に対応し、７２ビット目に出現ビットが設定されている。
【０１１６】
そして、検索処理は、抽出した対象区間ごとに、第１キーワードと次のキーワードとの単語列に対する基本ビットマップと検索クエリのさらに次のキーワードに対する基本ビットマップとをＡＮＤ演算する（ｓ３２）。ここでは、検索処理は、ファイルまたはブロックＮｏ「１」の対象区間について、「ｉｎ  ｆｒｏｎｔ」に対する基本ビットマップと検索クエリのさらに次のキーワード「ｏｆ」に対する基本ビットマップとをＡＮＤ演算する。このＡＮＤ演算した結果が、「ｉｎ  ｆｒｏｎｔ  ｏｆ」に対する基本ビットマップの中のファイルまたはブロックＮｏ「１」の対象区間である。ファイルまたはブロックＮｏ「１」の対象区間では、７２ビット目が「１」である。
【０１１７】
そして、検索処理は、ＡＮＤ演算した対象区間のうち、いずれかのビットが「１」を示す対象区間が有るか否かを判定する。ここでは、ＡＮＤ演算した対象区間は、「ｉｎ  ｆｒｏｎｔ  ｏｆ」に対する基本ビットマップの中のファイルまたはブロックＮｏ「１」の対象区間である。ファイルまたはブロックＮｏ「１」の対象区間では、７２ビット目が「１」である。したがって、検索処理は、いずれかのビットが「１」を示す対象区間としてファイルまたはブロックＮｏ「１」の対象区間が有ると判定する。すなわち、検索処理は、検索クエリ「ｉｎ  ｆｒｏｎｔ  ｏｆ」が存在する旨を検索結果として出力する。なお、検索処理は、どのファイルまたはブロックＮｏの対象区間のどの出現位置に検索クエリが存在するかを検索結果として出力しても良い。ここでは、検索処理は、ファイルまたはブロックＮｏ「１」の対象区間の７２ビット目に「ｉｎ  ｆｒｏｎｔ  ｏｆ」が存在する旨を検索結果として出力しても良い。
【０１１８】
［情報処理装置の構成］
図１３は、実施例２に係る情報処理装置の機能構成を示すブロック図である。なお、実施例１に係る図６に示す情報処理装置１００と同一の構成については同一符号を付すことで、その重複する構成および動作の説明については省略する。実施例１と実施例２とが異なるところは、検索部１２０の上位階層ビットマップ生成部１２２を上位階層ビットマップ生成部１２２Ａに変更し、文字列／単語列検索部１２３を文字列／単語列検索部１２３Ａに変更した点にある。また、実施例１と実施例２とが異なるところは、オフセットテーブル２０１を追加した点にある。上位階層ビットマップ生成部１２２Ａは、生成部の一例である。文字列／単語列検索部１２３Ａは、検索部の一例である。
【０１１９】
オフセットテーブル２０１は、図１２Ａおよび図１２ＢのオフセットテーブルＴ０に対応する。ここで、オフセットテーブル２０１のデータ構造の一例を、図１４を参照して説明する。図１４は、実施例２に係るオフセットテーブルのデータ構造の一例を示す図である。図１４に示すように、オフセットテーブル２０１は、オフセット位置２０１ｂを項目Ｎｏ２０１ａと対応付けて記憶する。項目Ｎｏ２０１ａは、項目で区切られた識別番号である。項目には、ファイル、ブロック、章や文章が挙げられる。なお、オフセットテーブル２０１は、項目ごとに、分けられていても良い。すなわち、オフセットテーブル２０１は、項目がファイルである場合のオフセットテーブル２０１Ａ、項目がブロックである場合のオフセットテーブル２０１Ｂ、項目が章である場合のオフセットテーブル２０１Ｃ、項目が文章である場合のオフセットテーブル２０１Ｄに、分けられても良い。かかる場合には、検索要求に検索対象の項目種別を含むようにすれば良い。
【０１２０】
一例として、項目Ｎｏ２０１ａが「０」である場合に、オフセット位置２０１ｂとして「０」を記憶している。項目Ｎｏ２０１ａが「１」である場合に、オフセット位置２０１ｂとして「２０１」を記憶している。項目Ｎｏ２０１ａが「２」である場合に、オフセット位置２０１ｂとして「３５５」を記憶している。
【０１２１】
上位階層ビットマップ生成部１２２Ａは、ビットマップ型インデックス１３２、および検索要求の内容に基づき、第１の軸を上位化した第２の軸を有する上位階層ビットマップを生成する。なお、検索要求の内容には、符号化データの元データであるテキストデータＦ１の区切り単位を示す項目種別が含まれていても良い。第２の軸は、第１の軸の区切り単位ごとのビット列をそれぞれ１ビットに上位化（集約）した軸である。例えば、上位階層ビットマップ生成部１２２Ａは、ビットマップ型インデックス１３２から、検索要求の第１キーワードに対する基本ビットマップの中の第ｎの６４ビット区間を抽出する。なお、ｎは、１以上の自然数である。上位階層ビットマップ生成部１２２Ａは、抽出した第ｎの６４ビット区間のいずれかのビットに出現ビットが設定されている場合には、オフセットテーブル２０１に基づいて、出現ビットが設定されている出現位置に対応付けられる項目Ｎｏ２０１ａを特定する。そして、上位階層ビットマップ生成部１２２Ａは、第１キーワードに対する上位階層ビットマップの中のビットであって特定した項目Ｎｏ２０１ａの区間を集約したビットに出現ビット「１」を設定する。そして、上位階層ビットマップ生成部１２２Ａは、ｎが６４ビット区間の最終区間になるまで、生成処理を繰り返す。
【０１２２】
文字列／単語列検索部１２３Ａは、第１キーワードに対する上位階層ビットマップを用いて、検索要求としての検索対象の文字列または単語列に対応した、符号化データに対する検索を行う。
【０１２３】
例えば、文字列／単語列検索部１２３Ａは、上位階層ビットマップ生成部１２２Ａによって生成された、検索対象の第１キーワードに対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。そして、文字列／単語列検索部１２３Ａは、オフセットテーブル２０１に基づいて、取得した出現ビットの出現位置に対応付けられる項目Ｎｏ２０１ａを特定し、特定した項目Ｎｏ２０１ａに対応付けられたオフセット位置２０１ｂを特定する。そして、文字列／単語列検索部１２３Ａは、ビットマップ型インデックス１３２から、特定したオフセット位置２０１ｂに対応する対象区間であって第１キーワードに対する基本ビットマップの中の対象区間を抽出する。
【０１２４】
そして、文字列／単語列検索部１２３Ａは、抽出した第１キーワードに対する基本ビットマップの対象区間を１ビットだけ左シフトする。文字列／単語列検索部１２３Ａは、第１キーワードに対する上位階層ビットマップを補正する。これは、対象区間の左シフトによりオーバーフローが発生した場合に上位階層ビットマップを補正する必要があるからである。そして、文字列／単語列検索部１２３Ａは、補正された、第１キーワードに対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。文字列／単語列検索部１２３Ａは、ビットマップ型インデックス１３２から、取得した出現位置に対応する対象区間であって次のキーワードに対する基本ビットマップの対象区間を抽出する。文字列／単語列検索部１２３Ａは、抽出した対象区間ごとに、第１キーワードに対する基本ビットマップと次のキーワードに対する基本ビットマップとをＡＮＤ演算する。
【０１２５】
そして、文字列／単語列検索部１２３Ａは、ＡＮＤ演算した対象区間のうち、いずれかのビットが出現ビットを示す対象区間が有るか否かを判定する。そして、文字列／単語列検索部１２３Ａは、該当する対象区間が無い場合には、検索対象が存在しないと判定する。文字列／単語列検索部１２３Ａは、該当する対象区間が有る場合には、さらに、現に処理されたキーワードと次のキーワードとを含む単語列または文字列の検索処理を繰り返す。そして、文字列／単語列検索部１２３Ａは、検索対象の次のキーワード（単語または文字）がなくなると、検索対象が存在すると判定する。
【０１２６】
［実施例２に係る検索処理の処理手順］
図１３に示した検索部１２０の処理手順について、図１５を参照して説明する。図１５は、実施例２に係る検索処理のフローチャートの一例を示す図である。なお、検索部１２０の処理手順の一例として、検索クエリが単語列である場合を説明するものとする。また、図８に示す検索処理のフローチャートと同一の処理については同一符号を付すことで、その重複する処理の説明については簡略する。実施例１と実施例２とが異なる点は、Ｓ２２Ａ、Ｓ２３Ａ、Ｓ２３Ｂ、Ｓ２６Ａ、Ｓ２６Ｂである。
【０１２７】
図１５に示すように、検索部１２０は、検索クエリを受け付けたか否かを判定する（ステップＳ２１）。検索クエリを受け付けていないと判定した場合には（ステップＳ２１；Ｎｏ）、検索部１２０は、検索クエリを受け付けるまで、判定処理を繰り返す。
【０１２８】
一方、検索クエリを受け付けたと判定した場合には（ステップＳ２１；Ｙｅｓ）、検索部１２０は、検索クエリの第１キーワード（今回の対象）に対する上位階層ビットマップ生成処理を実行する（ステップＳ２２Ａ）。なお、上位階層ビットマップ生成処理のフローチャートは、後述する。
【０１２９】
そして、検索部１２０は、オフセットテーブル２０１に基づいて、生成された上位階層ビットマップの出現ビットに対応する項目Ｎｏ２０１ａを特定し、特定した項目Ｎｏ２０１ａに対応付けられる対象区間を特定する（ステップＳ２３Ａ）。例えば、検索部１２０は、オフセットテーブル２０１に基づいて、生成された上位階層ビットマップの出現ビットの出現位置に対応付けられる項目Ｎｏ２０１ａを特定する。検索部１２０は、ビットマップ型インデックス１３２から、特定した項目Ｎｏ２０１ａに対応付けられたオフセット位置２０１ｂを特定する。そして、検索部１２０は、現に特定したオフセット位置２０１ｂの１つ前のオフセット位置２０１ｂから、現に特定したオフセット位置２０１ｂまでの対象区間を特定する。
【０１３０】
そして、検索部１２０は、ビットマップ型インデックス１３２から、特定した対象区間であって第１キーワード（今回の対象）に対する基本ビットマップの対象区間を抽出する（ステップＳ２３Ｂ）。
【０１３１】
検索部１２０は、今回の対象に対する基本ビットマップの対象区間を１ビットだけ左シフトする（ステップＳ２４）。そして、検索部１２０は、今回の対象に対する上位階層ビットマップを補正する（ステップＳ２５）。これは、対象区間の左シフトによりオーバーフローが発生した場合に上位階層ビットマップを補正する必要があるからである。
【０１３２】
そして、検索部１２０は、オフセットテーブル２０１に基づいて、補正された上位階層ビットマップの出現ビットに対応する項目Ｎｏ２０１ａを特定し、特定した項目Ｎｏ２０１ａに対応付けられる対象区間を特定する（ステップＳ２６Ａ）。例えば、検索部１２０は、オフセットテーブル２０１に基づいて、補正された上位階層ビットマップの出現ビットの出現位置に対応付けられる項目Ｎｏ２０１ａを特定する。検索部１２０は、ビットマップ型インデックス１３２から、特定した項目Ｎｏ２０１ａに対応付けられたオフセット位置２０１ｂを特定する。そして、検索部１２０は、現に特定したオフセット位置２０１ｂの１つ前のオフセット位置２０１ｂから、現に特定したオフセット位置２０１ｂまでの対象区間を特定する。
【０１３３】
そして、検索部１２０は、ビットマップ型インデックス１３２から、特定した対象区間であって検索クエリの次のキーワードに対する基本ビットマップの対象区間を抽出する（ステップＳ２６Ｂ）。
【０１３４】
そして、検索部１２０は、対象区間ごとに、今回の対象と次のキーワードとの基本ビットマップをＡＮＤ演算する（ステップＳ２７）。検索部１２０は、演算結果の対象区間のうち、出現ビットが設定された対象区間が有るか否かを判定する（ステップＳ２８）。出現ビットを持つ対象区間が無いと判定した場合には（ステップＳ２８；Ｎｏ）、検索部１２０は、今回の対象と次のキーワードとの単語列が無い旨を検索結果として出力する（ステップＳ２９）。そして、検索部１２０は、検索処理を終了する。
【０１３５】
一方、出現ビットを持つ対象区間が有ると判定した場合には（ステップＳ２８；Ｙｅｓ）、検索部１２０は、今回の対象と次のキーワードとの単語列が有ると判断し、検索クエリの終点であるか否かを判定する（ステップＳ３０）。検索クエリの終点でないと判定した場合には（ステップＳ３０；Ｎｏ）、検索部１２０は、今回の対象と次のキーワードとの単語列を今回の対象とする（ステップＳ３１）。そして、検索部１２０は、今回の対象と次のキーワードとの単語列を検索すべく、ステップＳ２４に移行する。
【０１３６】
一方、検索クエリの終点であると判定した場合には（ステップＳ３０；Ｙｅｓ）、検索部１２０は、今回の対象と次のキーワードとの単語列が有る旨を検索結果として出力する（ステップＳ３２）。そして、検索部１２０は、検索処理を終了する。
【０１３７】
［実施例２に係る上位階層ビットマップ生成処理の処理手順］
図１６は、実施例２に係る上位階層ビットマップ生成処理のフローチャートの一例を示す図である。なお、図９に示す上位階層ビットマップ生成処理のフローチャートと同一の処理については同一符号を付すことで、その重複する処理の説明については簡略する。実施例１と実施例２とが異なる点は、Ｓ４４Ａ、Ｓ４４Ｂである。
【０１３８】
図１６に示すように、検索部１２０は、インデックスｉに１を設定する（ステップＳ４１）。検索部１２０は、ビットマップ型インデックス１３２から、第１キーワードに対する基本ビットマップの中の第ｉの区間を抽出する（ステップＳ４２）。第ｉの区間は、例えば第ｉの６４ビット区間に対応する。
【０１３９】
検索部１２０は、抽出した第ｉの区間のいずれかのビットに出現ビットが設定されているか否かを判定する（ステップＳ４３）。いずれかのビットに出現ビットが設定されていないと判定した場合には（ステップＳ４３；Ｎｏ）、検索部１２０は、ステップＳ４５に移行する。
【０１４０】
一方、いずれかのビットに出現ビットが設定されていると判定した場合には（ステップＳ４３；Ｙｅｓ）、検索部１２０は、オフセットテーブル２０１に基づいて、出現ビットの出現位置に対応付けられる項目Ｎｏ２０１ａを特定する（ステップＳ４４Ａ）。そして、検索部１２０は、第１キーワードに対する上位階層ビットマップの項目Ｎｏに対応するビットに出現ビットを設定する（ステップＳ４４Ｂ）。つまり、検索部１２０は、第１キーワードに対する上位階層ビットマップの第ｉの区間を設定する。そして、検索部１２０は、ステップＳ４５に移行する。
【０１４１】
ステップＳ４５において、検索部１２０は、インデックスｉが最終区間のＮであるか否かを判定する（ステップＳ４５）。インデックスｉが最終区間のＮでないと判定した場合には（ステップＳ４５；Ｎｏ）、検索部１２０は、インデックスｉに１を加算する（ステップＳ４６）。そして、検索部１２０は、次の区間の処理をすべく、ステップＳ４２に移行する。
【０１４２】
一方、インデックスｉが最終区間のＮであると判定した場合には（ステップＳ４５；Ｙｅｓ）、検索部１２０は、上位階層ビットマップ生成処理を終了する。
【０１４３】
なお、インデックス生成部１１３は、文字／単語取得部１１２から出力された単語について、当該単語に対応する基本ビットマップを、ビットマップ型インデックス１３２から抽出する。インデックス生成部１１３は、抽出した基本ビットマップに、テキストデータＦ１内の出現位置に対応するビットに出現ビットを設定する。
【０１４４】
［実施例２の効果］
このようにして、上記実施例２では、検索部１２０は、符号化データに対する元データの区切り単位を含む内容に基づき、第１の軸を上位化して第２のインデックス情報を生成する。そして、検索部１２０は、第２のインデックス情報を用いて、検索要求に対応した符号化データに対する検索を行う。かかる構成によれば、検索部１２０は、第１の軸を用いた第１のインデックス情報を生成した後に、ファイルやブロック、項目、文などの、元データの区切り単位に合わせた第２のインデックス情報を動的に生成することで、検索の演算量を抑えることができる。言い換えれば、検索部１２０は、第１のインデックス情報を生成した後に、目的の粒度に合わせた第２のインデックス情報を動的に生成することで、目的の粒度の第１のインデックス情報を再生成する演算量や出現ビットの頻度が低い単語列や文字列を検索する演算量を抑えることができる。
【０１４５】
なお、実施例１、２では、符号化部１１０が、テキストデータＦ１を符号化する際に、それぞれの単語について出現位置を取得し、ビットマップ型インデックス１３２の基本ビットマップの、取得した出現位置に対するビットに出現ビットを設定すると説明した。そして、検索部１２０は、符号化データに対する検索クエリを受け付けると、受け付けた検索クエリを以下のように検索すると説明した。すなわち、検索部１２０は、検索クエリの第１キーワードに対する基本ビットマップを６４ビット区間ごとに抽出し、抽出した６４ビット区間ごとにビット列をそれぞれ１ビットに上位化（集約）した上位階層ビットマップを生成する。さらに、検索部１２０は、上位階層ビットマップを参照し、出現ビットに対応する出現位置を取得し、取得した出現位置に対応する６４ビット区間であって基本ビットマップの中の６４ビット区間を検索対象として検索クエリを検索すると説明した。しかしながら、符号化部１１０は、ビットマップ型インデックス１３２の（例えばＸ軸方向の）サイズ縮小を実現するために、ビットマップ型インデックス１３２のそれぞれの基本ビットマップをハッシュ化し、ハッシュ化インデックスを生成しても良い。すなわち、ハッシュ化処理は、隣接した２つの素数であるハッシュ値（底）を基に、それぞれの基本ビットマップについて、６４ビット区間ごとにハッシュ化したハッシュ化ビットマップを生成しても良い。
【０１４６】
ここで、基本ビットマップのハッシュ化について、図１７を参照して説明する。図１７は、基本ビットマップのハッシュ化を説明する図である。図１７に示すように、ハッシュ化処理は、単語の単語ＩＤに対応する基本ビットマップの６４ビット区間ごとに、ハッシュ関数を適用した２つのハッシュ化ビットマップを生成する。ここでは、ハッシュ化処理は、６４ビットのレジスタを想定し、例えば隣接した２９と３１のハッシュ値（底）を基に、基本ビットマップをハッシュ化する。具体的には、ハッシュ化処理は、１つの底のハッシュ化ビットマップを生成するために、単語ＩＤに対応する基本ビットマップの各ビットの位置を底で割った余りの位置に、当該基本ビットマップの各ビットの値を設定する。一例として、ハッシュ化処理は、底２９のハッシュ化ビットマップについて、「ｉｎ」に対する基本ビットマップの各ビットの位置を底２９で割った余りの位置に、基本ビットマップの各ビットの値を設定する（ｓ５１）。基本ビットマップの３５ビット目の位置のビット値「１」は、底２９のハッシュ化ビットマップの６ビット目に設定される。基本ビットマップの４２ビット目の位置のビット値「１」は、底２９のハッシュ化ビットマップの１３ビット目に設定される。ハッシュ化処理は、底３１のハッシュ化ビットマップについて、「ｉｎ」に対する基本ビットマップの各ビットの位置を底３１で割った余りの位置に、基本ビットマップの各ビットの値を設定する（ｓ５２）。基本ビットマップの３５ビット目の位置のビット値「１」は、底３１のハッシュ化ビットマップの４ビット目に設定される。基本ビットマップの４２ビット目の位置のビット値「１」は、底３１のハッシュ化ビットマップの１１ビット目に設定される。すなわち、ハッシュ化処理は、基本ビットマップの０ビット目からの各ビットを順番にハッシュ化ビットマップの０ビット目から設定し、（底−１）ビット目まで設定する。そして、ハッシュ化処理は、再度折り返してハッシュ化ビットマップの０ビット目から既にハッシュ化ビットマップに設定された値とＯＲ演算した値を設定する。
【０１４７】
このような基本ビットマップをハッシュ化したハッシュ化ビットマップから、検索部１２０は、検索クエリを検索すれば良い。すなわち、検索部１２０は、符号化データに対する検索クエリを受け付けると、検索クエリの第１キーワードに対するハッシュ化ビットマップを、６４ビット区間をハッシュ化した区間ごとに復元する。検索部１２０は、復元した６４ビット区間ごとにビット列をそれぞれ１ビットに上位化（集約）した上位階層ビットマップを生成する。さらに、検索部１２０は、上位階層ビットマップを参照し、出現ビットに対応する出現位置を取得し、取得した出現位置に対応するハッシュ化ビットマップを復元する。検索部１２０は、復元した６４ビット区間を検索対象として検索クエリを検索すれば良い。
【０１４８】
ここで、ハッシュ化された基本ビットマップの復元について、図１８を参照して説明する。図１８は、ハッシュ化された基本ビットマップの復元を説明する図である。なお、ハッシュ化された１つの６４ビット区間を復元する処理を説明する。図１８に示すように、復元処理は、２つのハッシュ化ビットマップをそれぞれビットマップに展開する（第１の復元処理）。ここでは、復元処理は、１つの底のハッシュ化ビットマップの復元先のビットマップについて、底に整数（０〜）を乗算して得られた値にハッシュ化ビットマップの各ビットの位置を加算した位置に、ハッシュ化ビットマップの各ビットの値を設定する（ｓ５３、ｓ５４）。一例として、復元処理は、底２９のハッシュ化ビットマップの復元先のビットマップについて、底２９に「０」を乗算した値にハッシュ化ビットマップの各ビットの位置を加算した位置に、底２９のハッシュ化ビットマップの各ビットの値を設定する。復元処理は、底２９のハッシュ化ビットマップの復元先のビットマップについて、底２９に「１」を乗算した値にハッシュ化ビットマップの各ビットの位置を加算した位置に、底２９のハッシュ化ビットマップの各ビットの値を設定する。復元処理は、復元先の底２９のビットマップの最大ビットの位置のビットの値が設定されるまで繰り返す。復元処理は、底３１のハッシュ化ビットマップも、同様に、復元先のビットマップに展開する。そして、復元処理は、第１の復元処理で復元された２つのビットマップの対応する位置のビットをＡＮＤ演算する（第２の復元処理）。ここでは、復元処理は、底２９のハッシュ化ビットマップから復元されたビットマップと、底３１のハッシュ化ビットマップから復元されたビットマップとをＡＮＤ演算する（ｓ５５）。復元処理は、ＡＮＤ結果のビットマップを基本ビットマップとして出力する。
【０１４９】
［実施例に関連する他の態様］
以下、上述の実施形態における変形例の一部を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行われうる。
【０１５０】
また、実施例では、符号化装置１００は、テキストデータＦ１の字句解析に基づいて得られる文字または単語それぞれに対して、テキストデータＦ１内での出現位置を第１の軸とした基本ビットマップのビットマップ型インデックス１２３を生成する。符号化装置１００は、文字または単語それぞれに対して、第１の軸を上位化した上位階層ビットマップのビットマップ型インデックス１２３を生成する。符号化装置１００は、上位階層ビットマップのビットマップ型インデックス１２３を用いて、最長一致探索の候補対象となるサブ領域を特定し、サブ領域それぞれにおける最長一致探索に基づき、符号化を行う。しかしながら、符号化装置１００は、文字または単語それぞれに対して生成される基本ビットマップおよび上位階層ビットマップを含むビットマップ型インデックス１２３の代わりに、文字または単語それぞれに対するビットマップごとにハッシュ化したハッシュ化インデックスを生成しても良い。そして、符号化装置１００は、最長一致探索の際に、該当する文字または単語に対するハッシュ化インデックスを復元し、復元した基本ビットマップおよび上位階層ビットマップを用いて、最長一致探索の候補対象となるサブ領域を特定し、サブ領域それぞれにおける最長一致探索に基づき、符号化を行えば良い。これにより、符号化装置１００は、符号化する際に、使用できる資源が少ない場合であっても、少ない資源で符号化することができる。
【０１５１】
また、実施例に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０１５２】
［情報処理装置のハードウェア構成］
下記に、上述の実施形態に用いられるハードウェア及びソフトウェアについて説明する。図１９は、コンピュータ１のハードウェア構成例を示す図である。コンピュータ１は、例えば、プロセッサ３０１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０２、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０３、ドライブ装置３０４、記憶媒体３０５、入力インターフェース（Ｉ／Ｆ）３０６、入力デバイス３０７、出力インターフェース（Ｉ／Ｆ）３０８、出力デバイス３０９、通信インターフェース（Ｉ／Ｆ）３１０、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）インターフェース（Ｉ／Ｆ）３１１およびバス３１２などを含む。それぞれのハードウェアはバス３１２を介して接続されている。
【０１５３】
ＲＡＭ３０２は読み書き可能なメモリ装置であって、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）やＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）などの半導体メモリ、またはＲＡＭでなくてもフラッシュメモリなどが用いられる。ＲＯＭ３０３は、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）なども含む。ドライブ装置３０４は、記憶媒体３０５に記録された情報の読み出しか書き込みかの少なくともいずれか一方を行なう装置である。記憶媒体３０５は、ドライブ装置３０４によって書き込まれた情報を記憶する。記憶媒体３０５は、例えば、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などのフラッシュメモリ、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）、ブルーレイディスクなどの記憶媒体である。また、例えば、コンピュータ１は、複数種類の記憶媒体それぞれについて、ドライブ装置３０４及び記憶媒体３０５を設ける。
【０１５４】
入力インターフェース３０６は、入力デバイス３０７と接続されており、入力デバイス３０７から受信した入力信号をプロセッサ３０１に伝達する回路である。出力インターフェース３０８は、出力デバイス３０９と接続されており、出力デバイス３０９に、プロセッサ３０１の指示に応じた出力を実行させる回路である。通信インターフェース３１０はネットワーク３を介した通信の制御を行なう回路である。通信インターフェース３１０は、例えばネットワークインターフェースカード（ＮＩＣ）などである。ＳＡＮインターフェース３１１は、ストレージエリアネットワークによりコンピュータ１と接続された記憶装置との通信の制御を行なう回路である。ＳＡＮインターフェース３１１は、例えばホストバスアダプタ（ＨＢＡ）などである。
【０１５５】
入力デバイス３０７は、操作に応じて入力信号を送信する装置である。入力信号は、例えば、キーボードやコンピュータ１の本体に取り付けられたボタンなどのキー装置や、マウスやタッチパネルなどのポインティングデバイスである。出力デバイス３０９は、コンピュータ１の制御に応じて情報を出力する装置である。出力デバイス３０９は、例えば、ディスプレイなどの画像出力装置（表示デバイス）や、スピーカーなどの音声出力装置などである。また、例えば、タッチスクリーンなどの入出力装置が、入力デバイス３０７及び出力デバイス３０９として用いられる。また、入力デバイス３０７及び出力デバイス３０９は、コンピュータ１と一体になっていても良いし、コンピュータ１に含まれず、例えば、コンピュータ１に外部から接続する装置であっても良い。
【０１５６】
例えば、プロセッサ３０１は、ＲＯＭ３０３や記憶媒体３０５に記憶されたプログラムをＲＡＭ３０２に読み出し、読み出されたプログラムの手順に従って符号化部１１０および検索部１２０の処理を行なう。その際にＲＡＭ３０２はプロセッサ３０１のワークエリアとして用いられる。記憶部１３０の機能は、ＲＯＭ３０３および記憶媒体３０５がプログラムファイル（後述のアプリケーションプログラム２４、ミドルウェア２３およびＯＳ２２など）やデータファイル（例えば、静的辞書１３１、ビットマップ型インデックス１３２など）を記憶し、ＲＡＭ３０２がプロセッサ３０１のワークエリアとして用いられることによって実現される。プロセッサ３０１が読み出すプログラムについては、図２０を用いて説明する。
【０１５７】
図２０は、コンピュータで動作するプログラムの構成例を示す図である。コンピュータ１において、図１９に示すハードウェア群（ＨＷ）２１（３０１〜３１２）の制御を行なうＯＳ（オペレーティング・システム）２２が動作する。ＯＳ２２に従った手順でプロセッサ３０１が動作して、ハードウェア群（ＨＷ）２１の制御・管理が行なわれることにより、アプリケーションプログラム（ＡＰ）２４やミドルウェア（ＭＷ）２３に従った処理がハードウェア群２１で実行される。さらに、コンピュータ１において、ミドルウェア（ＭＷ）２３またはアプリケーションプログラム（ＡＰ）２４が、ＲＡＭ３０２に読み出されてプロセッサ３０１により実行される。
【０１５８】
プロセッサ３０１が、符号化機能が呼び出された場合に、ミドルウェア２３またはアプリケーションプログラム２４の少なくとも一部に基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてハードウェア群２１を制御して）符号化部１１０および検索部１２０の機能が実現される。符号化機能および検索機能は、アプリケーションプログラム２４自体に含まれても良いし、アプリケーションプログラム２４に従って呼び出されることで実行されるミドルウェア２３の一部であっても良い。
【０１５９】
図２１は、実施形態のシステムにおける装置の構成例を示す図である。図２１のシステムは、コンピュータ１ａ、コンピュータ１ｂ、基地局２およびネットワーク３を含む。コンピュータ１ａは、無線または有線の少なくとも一方により、コンピュータ１ｂと接続されたネットワーク３に接続している。
【０１６０】
図６に示す符号化部１１０と検索部１２０とは、図２１に示すコンピュータ１ａとコンピュータ１ｂとのいずれに含まれても良い。コンピュータ１ｂが符号化部１１０の機能を含み、コンピュータ１ａが検索部１２０の機能を含んでも良いし、コンピュータ１ａが符号化部１１０の機能を含み、コンピュータ１ｂが検索部１２０の機能を含んでも良い。また、コンピュータ１ａとコンピュータ１ｂとの双方が、符号化部１１０の機能および検索部１２０の機能を備えても良い。
【符号の説明】
【０１６１】
１００  情報処理装置
１１０  符号化部
１１１  ファイルリード部
１１２  文字／単語取得部
１１３  インデックス生成部
１１４  符号化処理部
１１５  ファイルライト部
１２０  検索部
１２１  検索要求受付部
１２２、１２２Ａ  上位階層ビットマップ生成部
１２３、１２３Ａ  文字列／単語列検索部
１２４  検索結果出力部
１３０  記憶部
１３１  静的辞書
１３２  ビットマップ型インデックス
２０１  オフセットテーブル
【図１】
2018163505.tif 000003
【図２】
2018163505.tif 000004
【図３】
2018163505.tif 000005
【図４】
2018163505.tif 000006
【図５Ａ】
2018163505.tif 000007
【図５Ｂ】
2018163505.tif 000008
【図６】
2018163505.tif 000009
【図７】
2018163505.tif 000010
【図８】
2018163505.tif 000011
【図９】
2018163505.tif 000012
【図１０】
2018163505.tif 000013
【図１１】
2018163505.tif 000014
【図１２Ａ】
2018163505.tif 000015
【図１２Ｂ】
2018163505.tif 000016
【図１３】
2018163505.tif 000017
【図１４】
2018163505.tif 000018
【図１５】
2018163505.tif 000019
【図１６】
2018163505.tif 000020
【図１７】
2018163505.tif 000021
【図１８】
2018163505.tif 000022
【図１９】
2018163505.tif 000023
【図２０】
2018163505.tif 000024
【図２１】
2018163505.tif 000025