JP2009294967A - 木構造のデータに対する集約計算を行うコンピュータ・システム、並びにその方法及びコンピュータ・プログラム - Google Patents
木構造のデータに対する集約計算を行うコンピュータ・システム、並びにその方法及びコンピュータ・プログラム Download PDFInfo
- Publication number
- JP2009294967A JP2009294967A JP2008148798A JP2008148798A JP2009294967A JP 2009294967 A JP2009294967 A JP 2009294967A JP 2008148798 A JP2008148798 A JP 2008148798A JP 2008148798 A JP2008148798 A JP 2008148798A JP 2009294967 A JP2009294967 A JP 2009294967A
- Authority
- JP
- Japan
- Prior art keywords
- node
- index
- nodes
- value
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【解決手段】ノードのそれぞれはノードの種類を示す1つのラベル及び0個以上の値を含む。ノードそれぞれに後行順(post-order)でノードidを割り振るノードid割振部と、ノードそれぞれのノードidと、ノードに含まれる値とを含む1以上の組のデータを有するところの第1のインデックスを作成する第1のインデックス作成部と、ノードそれぞれのノードidと、ノードの少なくとも1つの子孫ノードの間で最小のノードidを有する子孫ノードのノードidとを含む1以上の組のデータを有するところの第2のインデックスを作成する第2のインデックス作成部と、特定の値を含む1以上のノードのノードidを含む1以上の組のデータを有する第3のインデックスを作成する第3のインデックス作成部とを含む。
【選択図】図2
Description
上記ノードそれぞれに後行順(post-order)でノードidを割り振るノードid割振部と、
上記ノードそれぞれのノードidと、該ノードに含まれる値とを含む1以上の組のデータを有するところの第1のインデックスを作成する第1のインデックス作成部であって、該1以上の組のデータは上記ラベル毎に作成される、上記第1のインデックス作成部と、
上記ノードそれぞれのノードidと、該ノードの少なくとも1つの子孫ノードの間で最小のノードidを有する子孫ノードのノードidとを含む1以上の組のデータを有するところの第2のインデックスを作成する第2のインデックス作成部であって、該1以上の組のデータは上記ラベル毎に作成される、上記第2のインデックス作成部と、
特定の値を含む1以上のノードのノードidを含む1以上の組のデータを有する第3のインデックスを作成する第3のインデックス作成部であって、該1以上の組のデータは上記ラベル毎の上記特定の値毎に作成される、上記第3のインデックス作成部と
を含む。集約計算を行うための検索式の結果が、上記作成し第1、第2及び第3のインデックスに基づいて、求められる。上記検索式は例えば、値、又は該値及びその頻度を集計する。特に、上記検索式は、所与のラベルを持つノードを集計単位として、該ノードの値、又は該値及びその頻度を集計する。
集約計算を行うための検索式を受信する受信部と
上記検索式の検索対象である値を用い及び、特定の値を含む1以上のノードのノードidを含む1以上の組のデータを有するインデックスを用いて、上記検索式の検索対象である上記値を有する1以上のノードのノードidを含む第1のリストを取得する第1のリスト取得部であって、該1以上の組のデータは上記ラベル毎の上記特定の値毎に作成される、上記第1のリスト取得部と、
上記取得した第1のリストを用い及び、上記ノードそれぞれのノードidと、該ノードの少なくとも1つの子孫ノードの間で最小のノードidを有する子孫ノードのノードidとを含む1以上の組のデータを有するところのインデックスを用いて、上記検索式の検索対象である上記値を有する1以上のノードを子孫に持つ各木構造のルート・ノードの1以上のルート・ノードidを含む第2のリストを取得する第2のリスト取得部であって、該1以上の組のデータは上記ラベル毎に作成される、上記第2のリスト取得部と、
上記取得した第2のリストに基づいて、上記検索式の検索対象である上記値を検索する検索部であって、上記検索式の検索対象である上記値が少なくとも1つのキーワードに対応する、上記検索部と
を含む。
上記取得した第2のリストを用いて及び、上記ノードそれぞれのノードidと、該ノードに含まれる値とを含む1以上の組のデータを有するところのインデックスを用いて、上記検索式の検索条件を満たす、1以上のノードの1以上の値を含む第3のリストを取得する第3のリスト取得部であって、該1以上の組のデータは上記ラベル毎に作成される、上記第3のリスト取得部と、
上記取得した第3のリストに基づいて、上記検索式の結果を求める計算部と
を含む。
上記ノードの情報を上記メモリー内に読み込み、上記情報を読み込んだノードそれぞれに後行順(post-order)でノードidを割り振るステップと、
上記ノードそれぞれのノードidと、該ノードに含まれる値とを含む1以上の組のデータを有するところの第1のインデックスを作成し、該作成した第1のインデックスを上記記憶部に格納するステップであって、該1以上の組のデータは上記ラベル毎に作成される、上記第1のインデックスを格納するステップと、
上記ノードそれぞれのノードidと、該ノードの少なくとも1つの子孫ノードの間で最小のノードidを有する子孫ノードのノードidとを含む1以上の組のデータを有するところの第2のインデックスを作成し、該作成した第2のインデックスを上記記憶部に格納するステップであって、該1以上の組のデータは上記ラベル毎に作成される、上記第2のインデックスを格納するステップと、
特定の値を含む1以上のノードのノードidを含む1以上の組のデータを有する第3のインデックスを作成し、該作成した第3のインデックスを上記記憶部に格納するステップであって、該1以上の組のデータは上記ラベル毎の上記特定の値毎に作成される、上記第3のインデックスを格納するステップと
を含む。集約計算を行うための検索式の結果が、上記作成し第1、第2及び第3のインデックスに基づいて、求められる。
上記第1のインデックスにおける値又は上記第3のインデックスにおけるノードidを圧縮するステップを含む。
集約計算を行うための検索式を受信し、該受信した検索式を上記メモリー内に記憶するステップと、
上記検索式の検索対象である値を用い及び、特定の値を含む1以上のノードのノードidを含む1以上の組のデータを有するインデックスを用いて、上記検索式の検索対象である上記値を有する1以上のノードのノードidを含む第1のリストを取得し、該取得した第1のリストを上記記憶部に記憶するステップであって、該1以上の組のデータは上記ラベル毎の上記特定の値毎に作成される、上記第1のリストを記憶するステップと、
上記取得した第1のリストを用い及び、上記ノードそれぞれのノードidと、該ノードの少なくとも1つの子孫ノードの間で最小のノードidを有する子孫ノードのノードidとを含む1以上の組のデータを有するところのインデックスを用いて、上記検索式の検索対象である上記値を有する1以上のノードを子孫に持つ各木構造のルート・ノードの1以上のルート・ノードidを含む第2のリストを取得し、該取得した第2のリストを上記記憶部に記憶するステップであって、該1以上の組のデータは上記ラベル毎に作成される、上記第2のリストを記憶するステップと、
上記取得した第2のリストに基づいて、上記検索式の検索対象である上記値を検索するステップであって、上記検索式の検索対象である上記値が少なくとも1つのキーワードに対応する、上記検索するステップと
を含む。
上記取得した第2のリストを用い及び、上記ノードそれぞれのノードidと、該ノードに含まれる値とを含む1以上の組のデータを有するところのインデックスを用いて、上記検索式の検索条件を満たす、1以上のノードの1以上の値を含む第3のリストを取得し、該取得した第3のリストを上記記憶部に記憶するステップであって、該1以上の組のデータは上記ラベル毎に作成される、上記第3のリストを記憶するステップと、
上記取得した第3のリストに基づいて、上記検索式の結果を求めるステップと
を含む。
上記第3のリストの残りが、上記ノードそれぞれのノードidと、該ノードに含まれる値とを含む1以上の組のデータを有するところのインデックス、及び上記ノードそれぞれのノードidと、該ノードidそれぞれに関連付けられたポインタとを含む組のデータが格納されているインデックスを用いてランダムアクセスにより取得され、
上記第3のリストが、上記シーケンシャルアクセスと上記ランダムアクセスとを切り替えることによって取得される。
上記ノードの情報を上記メモリー内に読み込み、上記情報を読み込んだノードそれぞれに後行順(post-order)でノードidを割り振るステップと、
上記ノードそれぞれのノードidと、該ノードに含まれる値とを含む1以上の組のデータを有するところの第1のインデックスを作成し、該作成した第1のインデックスを上記記憶部に格納するステップであって、該1以上の組のデータは上記ラベル毎に作成される、上記第1のインデックスを格納するステップと、
上記ノードそれぞれのノードidと、該ノードの少なくとも1つの子孫ノードの間で最小のノードidを有する子孫ノードのノードidとを含む1以上の組のデータを有するところの第2のインデックスを作成し、該作成した第2のインデックスを上記記憶部に格納するステップであって、該1以上の組のデータは上記ラベル毎に作成される、上記第2のインデックスを格納するステップと、
特定の値を含む1以上のノードのノードidを含む1以上の組のデータを有する第3のインデックスを作成し、該作成した第3のインデックスを上記記憶部に格納するステップであって、該1以上の組のデータは上記ラベル毎の上記特定の値毎に作成される、上記第3のインデックスを格納するステップと、
上記メモリー内に記憶した集約計算を行うための検索式の検索対象である値及び上記第3のインデックスを用いて、上記検索式の検索対象である上記値を有する1以上のノードのノードidを含む第1のリストを取得し、該取得した第1のリストを上記記憶部に記憶するステップと、
上記取得した第1のリスト及び上記第2のインデックスを用いて、上記検索式の検索対象である上記値を有する1以上のノードを子孫に持つ各木構造のルート・ノードの1以上のルート・ノードidを含む第2のリストを取得し、該取得した第2のリストを上記記憶部に記憶するステップと、
上記取得した第2のリスト及び上記第1のインデックスを用いて、上記検索式の検索条件を満たす、1以上のノードの1以上の値を含む第3のリストを取得し、該取得した第3のリストを上記記憶部に記憶するステップと、
上記取得した第3のリストに基づいて、上記検索式の結果を求めるステップと
を含む。
図1Aは、コールセンターにおけるログ・データ(100)の例を示す。ログ・データ(100)では、顧客からの問い合わせがQ及びオペレータの応答がAとして示される。
図1Aはまた、上記ログ・データ(100)にマークアップ言語のタグを付加したデータ(101)の例を示す。該タグは、ログ・データ(100)に木構造を与えるために付加される。マークアップ言語として、例えばXML(Extensible Markup Language)が使用されうる。タグは、ユーザーによって任意に設定されうる。タグ<Document>及び</Document>は、該ログ・データ(100)の種類を示す。タグ<Q>及び</Q>は、質問部分であることを示す。タグ<A>及び</A>は、回答部分であることを示す。
図1Bは、NLPを使用して該ログ・データ(100)から文及び/又は単語を抜き出したデータ(102)を示す。NLP処理を実施するためのソフトウェア技術は例えば、UIMA(Unstructured Information Management Architecture)である。データ(102)では、ログ・データ(100)のうち、NLP処理により抜き出された個所の前後にタグが付加されている。タグ<expression_desire>及び</expression_desire>は、願望の表現を含む部分であることを示す。タグ<noun>及び</noun>は、名詞を含む部分であることを示す。タグ<verb>及び</verb>は、動詞を含む部分であることを示す。タグ<proper_noun>及び</proper_noun>は、固有名詞を含む部分であることを示す。
図1Bはまた、データ(102)からNLP処理により抜き出されなかった個所を除いたデータ(103)の例を示す。データ(103)が、下記に述べる木構造のデータを作成するために使用されうる。
なお、データ(102、103)は、NLP処理により抜き出されたデータのフォーマットの一例であり、図示した構造を必ずしもとるものではない。上記NLP処理は、コールセンターのログ・データに限らず、さまざまな文書についても応用することができる。
木構造は、少なくとも1つのノードを含む。ノードは、ユニットともいう。木構造について、図2の木構造(200A)を用いて説明する。木構造(200A)は、ルート・ノード(216)及び複数のノード(210〜215)を有する。同様に、木構造(200B)は、ルート・ノード(227)及び複数のノード(220〜226)を有する。各ノード(201)は、リンク(206)で結ばれる。リンクで結ばれたノード(201)のうち、上方に存在するノードを親ノードといい、一方下方に存在するノードを子ノードという。例えば、ノード(210)の親ノードは、ノード(214)である。例えば、ノード(216)の子ノードは、ノード(213〜215)である。ある親ノードから見て、子ノード、子ノードの子ノード(孫ノードである)、・・・、及び最下方に存在する子ノードをまとめて子孫ノードという。例えば、ノード(216)の子孫ノードは、ノード(210〜215)である。ノード(201)は、0個以上の子ノードを持ちうる。ノード(201)のうち、最上流のノードをルート・ノード(202)という。
セクション(203)は、ノード(201)の種類を示すラベルである。ラベルは、ノード(201)毎に1つ割り当てられる。例として、ノード(210、212)のセクションには、ラベル“Noun”が割り当てられている。同様に、ノード(211)のセクションには、ラベル“Verb”が割り当てられている。ルート・ノード(202)に割り当てるセクションがない場合には、仮想のセクション(205)が割り当てられる。
値(204)は、数値、文字列、又はそれらの組み合わせを含む。1つのノード(201)は、0個以上の値(204)を含む。例として、ノード(213)の値は、20071112の1つであり、ノード(212)の値は、“Internet”及び“modem”の2つである。また、ノード(214)は値を有しないので、0個の値を含む。0個の値は、NULL又は空白で表現されうる。
木構造(200A、200B)のルート・ノード(216、227)の仮想セクション(205)は、該木構造が“DOCUMENT”についてのものであることを示す。木構造(200A、200B)のノード(201)それぞれが、木構造(200A、200B)の文書の持つ情報を示す。例えば、セクションが“Date”のノード(213、223)は、文書の作成日の情報を持つことを示す。文書の作成日は、値として示される。また、セクションが“Question”であるノード(214、224及び225)は、顧客からの問い合わせ内容の情報を持つことを示す。ただし、木構造(200A、200B)では、セクションが“Question”であるノード(214、224及び225)それ自体は、顧客からの問い合わせの内容を値として持たない。“Question”のノード(214、224及び225)は、顧客からの問い合わせの内容をさらに種類ごとに細分化した子ノード(それぞれ210〜211、220及び221)を持つからである。例えば、子ノード(210〜211、220及び221)のうち、セクションが“Noun”であるノード(210、220及び221)は、問い合わせに含まれる名詞を値として持つ。セクションが“Verb”であるノード(211及び222)は、問い合わせに含まれる動詞を値として持つ。木構造のデータを作成する際に値に保存する対象はキーワードでありうる。キーワードは、問い合わせの本文中からNLP処理などの技術を用いて抽出される。抽出の方法は、慣用の方法を使用しうる。例えば、単語の出現頻度を解析して抽出する方法、大規模な単語リストを用いて抽出する方法、及び文の構造を解析して抽出する方法が用いられうる。
集約計算とは、与えられた任意のセクションを持つノードを集計単位として、値を集計することを意味する。集計単位とは、木構造においてノードの子孫ノードに同じ値が何回出現しても1回とカウントする基準である。集計とは例えば、値について、値及びその出現回数(頻度ともいう)の組を頻度の降順若しくは昇順に出力する処理、又は任意の集合関数を用いて計算する処理をいう。任意の集合関数は例えば、count(件数)、sum(合計)、min(最小値)、max(最大値)及びavg(平均)であり、ユーザーが独自に定義した関数も含みうる。
検索条件:図2の各木構造(200A、200B)について、セクションが“Document”であるノード(216、227)を集計単位として、セクションが“Noun”であるノード(210、212、220、221)に含まれる値及びその頻度を降順に出力する。
以下に、上記検索条件による結果を導くプロセスを示す。
最初に、ルート・ノード(216)を集計単位のノードとした場合を考える。集計単位であるルート・ノード(216)の子孫ノードであり且つセクションが“Noun”であるノードは、ノード(210、212)の2つである。ノード(210)の値は、“Internet”、“PC”及び“phone”である。ノード(212)の値は、“Internet”及び“modem”である。よって、ルート・ノード(216)を集計単位のノードとした場合、発生した値は、“Internet”、“PC”、“phone”及び“modem”である。ここで、“Internet”は、ノード(210)及びノード(212)の両方に重複して出現する。しかし、いずれのノード(210、212)も集計単位となるルート・ノード(216)の子孫ノードであるので、値“Internet”の出現回数は1回と数えられる。
次に、ルート・ノード(227)を集計単位のノードとした場合を考える。集計単位であるルート・ノード(227)の子孫ノードであり且つセクションが“Noun”であるノードは、ノード(220、221)の2つである。 ノード(220)の値は、“Internet”及び“phone”である。ノード(221)の値は、“Internet”及び“modem”である。よって、ルート・ノード(227)を集計単位のノードとした場合、発生した値は、“Internet”、“phone”及び“modem”である。ここで、“Internet”は、ノード(220)及びノード(221)の両方に重複して出現する。しかし、いずれのノード(220、221)も集計単位となるルート・ノード(227)の子孫ノードであるので、値“Internet”の出現回数は1回と数えられる。
以上より、セクションが“Document”であるルート・ノード(216、227)を集計単位として、セクションが“Noun”であるノード(210、212、220、221)に含まれる値及びその頻度を求めた場合、値“Internet”が2回であり、値“modem”が2回であり、値“phone”が2回であり、及び値“PC”が1回である。
上記例では、ルート・ノードを集計単位のノードとして考えたが、それ以外のノードの場合にも、上記プロセスが適用される。下記にその例を示す。
検索条件:図2の各木構造(200A、200B)について、セクションが“Question”であるノード(214、224、225)を集計単位として、セクションが“Noun”であるノード(210、212、220、221)に含まれる値及びその頻度を降順に出力する。
最初に、集計単位となるノードの1つであるノード(214)の子孫ノードであり且つセクションが“Noun”であるノードは、ノード(210)である。ノード(210)の値は、“Internet”、“PC”及び“phone”である。
次に、集計単位となるノードの1つであるノード(224)の子孫ノードであり且つセクションが“Noun”であるノードは、ノード(220)である。ノード(220)の値は、“Internet”及び“phone”である。
最後に、集計単位となるノードの1つであるノード(225)の子孫ノードであり且つセクションが“Noun”であるノードは、ノード(221)である。ノード(221)の値は、“Internet”及び“modem”である。
以上より、セクションが“Question”であるノード(214、224、225)を集計単位として、セクションが“Noun”であるノード(210、212、220、221)に含まれる値及びその頻度を求めた場合、値“Internet”が3回であり、値“phone”が2回であり、値“modem”が1回であり、及び値“PC”が1回である。
検索条件:図2の各木構造(200A、200B)について、セクションが“Document”であるノード(216、227)を集計単位として、セクションが“Question”であるノードの子ノードであり、該子ノードのセクションが“Noun”であり、及び該子ノードに含まれる値が“Internet”である場合に、セクションが“Answer”であるノードの子ノードであり、該子ノードのセクションが“Noun”であるノードの値及びその頻度を集計する。
該検索結果の値は、ノード(212)の値である“Internet”及び“modem”である。該検索結果の頻度は、“Internet”が1であり、及び“modem”が1である。
上記検索条件は、複雑な集約の例である。該集約は、セクションが“Answer”であるノードの子ノードにおいてセクションが“Noun”であるノード(312)のみが集計の対象になる。該集約によって、例えば顧客がインターネットについて言及しているときに、オペレータが発している言葉の内訳を知ることができる。
ノードidの割り振りには、木構造の走査(traversal)方法の1つである後行順(post-order)を用いる。後行順(post-order)は、後置順とも呼ばれる。木構造に対する後行順(post-order)とは、木のルート・ノードを T、T の子要素を T1、...、Tk としたとき、「T1をルート・ノードとする木を後行順で処理」、「T2をルート・ノードとする木を後行順で処理」・・・「Tkをルート・ノードとする木を後行順で処理」及び「Tを処理」というように再帰的に定義される処理順序のことである。ノードidは例えば、整数値でありうる。
図4の木構造400A及び400Bは、図2の木構造200A及び200Bにそれぞれ対応する。図4のid:1〜15が、各ノードに割り振られたノードidである。
最初に、木構造(400A)のルート・ノードであるノード(416)を選択する。次に、ノード(416)の子ノードのうち、左から1番目の子ノードであるノード(413)を選択する。ノード(413)は子ノードを持たないので、ノード(413)にノードid:1を割り振る。次に、ノード(413)の親ノード(416)を選択する。親ノード(416)の子ノードのうち、左から2番目の子ノードであるノード(414)を選択する。ノード(414)はさらに子ノードを(410、411)持つため、左から1番目の子ノードであるノード(410)を選択する。ノード(410)は子ノードを持たないので、ノード(410)にノードid:2を割り振る。次に、ノード(410)の親ノード(414)を選択する。次に、ノード(414)の子ノードのうち、左から2番目の子ノードであるノード(411)を選択する。ノード(411)は子ノードを持たないので、ノード(411)にノードid:3を割り振る。次に、ノード(411)の親ノード(414)を選択する。ノード(414)の全ての子ノード(410、411)にidが割り振られているので、ノード(414)にノードid:4を割り振る。次に、ノード(414)の親ノード(416)を選択する。ノード(416)の子ノードのうち、左から3番目の子ノードであるノード(415)を選択する。ノード(415)は、さらに子ノード(412)を持つため、左から1番目の子ノードであるノード(412)を選択する。ノード(412)は子ノードを持たないので、ノード(412)にノードid:5を割り振る。次に、ノード(412)の親ノード(415)を選択する。ノード(415)の全ての子ノード(412)にidが割り振られているので、ノード(415)にノードid:6を割り振る。次に、ノード(415)の親ノード(416)を選択する。ノード(416)の全ての子ノード(413、414、415)にidが割り振られているので、ノード(416)にノードid:7を割り振る。以上の手順により、木構造(400A)に含まれる全てのノードに、ノードidが割り振られる。
引き続き別の木構造(400B)について、各ノードに後行順(post-order)でノードidを割り振る場合、ノードidの割り振りは続きのid番号(上記例においては8)から始められる。木構造(400B)について、各ノードに後行順(post-order)でノードidを割り振った結果は、図4を参照されたい。
木構造を有するデータの集合を、D={T1,T2,...,Ti,...,Tm}(1≦i≦m)で表す。ここで、mは少なくとも1である。各Tは、有限個のノードを含む。以下、記号Tiを用いて、Tiのルート・ノードも指す。Tiに含まれるノードの個数をniとする。
各ノードは、1つのセクション及び0個以上の値を有する。セクションは、ノードの種類を示す1つのラベル(b)を含む。よって、上記ノードの定義において、セクションをラベルと読み替えることができる。以下では、セクションをSで表し、値をVLで表す。1つのノードは、ノードの親子関係の情報のほかに、{b;VL1, VL2,..., VLi,..., VLk}(0≦i≦k)という情報を有する。ここで、kは0であってよい。すなわち、ノードがVLを持たなくてもよい。本発明の1つの実施態様では、値、例えば“modem”のような文字列、は、一意な整数値で符号化されうる。
Dに現れるすべてのラベルの集合をL={b1,b2,...,bi,...,bp}(1≦b≦p)で表す。各ラベルbiは、圧縮に適した整数値で符号化しうる。符号化の例は、Document=1、Date=2、及びQuestion=3である。D内の木構造を順次読んでいき、未知のラベルが出現した場合は、その都度、新しい整数値がそのラベルに割り振られうる。
上記ルート・ノードのセクションは、全て等しいものである必要はない。なぜならば、後述する集約単位のセクションScに対して、その子孫ノードに対するjoin操作をすることにより、上記ルート・ノードのセクションが全て等しい場合と同じ結果を得ることができるからである。
図5Aは、本発明の実施態様である、u2vインデックスの概念スキーマ及び保管の例を示す。u2vインデックスの概念スキーマは、セクション・ポインター・ツリー(500)及び表(501、502)で示される。セクション・ポインター・ツリー(500)は、表(501)の各行へのポインタの集合データを示す。表(501)の各行は、1セクション分のインデックスを示す。1列目は、行のサイズである。2列目は、セクションに対応するノードの数である。3列目以降は、セクションに対応するノードの数分のEntryである。表(502)は、Entryの詳細を示す。1列目は、ノードidを示す。2列目は、ノードidが割り振られたノードに含まれる値の数を示す。3列目以降は、ノードidが割り振られたノードに含まれる値を示す。本発明の1つの実施態様として、3列目以降に設定される値は、差分圧縮されうる。差分圧縮の方法については後述する。
{byte_size_of_array}(N:number_of_nodes)
[id_1][M1:number_of_values_1]
<value_1,1><value_1,2 -value_1,1>...<value_1,M1- value_1,M1-1>
[id_2][M2:number_of_values_2]
<value_2,1><value_2,2 -value_2,1>...<value_2,M2- value_2,M2-1>
......
[id_N][MN:number_of_value_N]
<value_N,1><value_N,2 -value_N,1>...<value_N,MN- value_N,MN-1>
上記データフォーマット内の改行は、見易さのためであり、データに含まれない。また、{}、()、[]及び<>などの区切りは、論理的なデータの区切りを表示するためのものであり、データに含まれない。{}は、非圧縮long(8bytes)を意味する。()は、非圧縮int(4bytes)を意味する。非圧縮とは、2の補数表記による標準的な符号化のことをいう。また、[]は、圧縮intを意味する。<>は、差分圧縮intを意味する。圧縮は、可変長の符号化でありうる。
byte_size_of_arrayは、先頭の[id_1]から最後の<value_N,MN - value_N,MN-1>までのバイト列の長さを示す。Nは、格納されているノードの数を示す。idは、ノードidを示す。アンダーバーの後に続く値は、ノードを識別するために振った表記上の番号である。Mは、値の数を示す。Mの右下付で示された値は、ノードを識別するために振った表記上の番号である。valueは、値である。アンダーバーの後に続く値は、ノードを識別するために振った表記上の番号である。カンマの後に続く値は、値を識別するために振った表記上の番号である。
u2vインデックスとは、全てのセクションに対して上記データフォーマットを作り、連結したものである。本発明の1つの実施態様として、該データフォーマットは、シーケンシャルに連結されている。セクションが例えば2種類しかなければ、該データフォーマットは次の通りである。
{byte_size_of_array}(N1:number_of_nodes)
[id_1][M1:number_of_values_1]
<value_1,1><value_1,2 -value_1,1>...<value_1,M1- value_1,M1-1>
......
[id_N1][MN1:number_of_value_N1]
<value_N1,1><value_N1,2 -value_N1,1>...<value_N1,MN1- value_N1,MN1-1>
{byte_size_of_array}(N2:number_of_nodes)
[id_1][M1:number_of_values_1]
<value_1,1><value_1,2 -value_1,1>...<value_1,M1- value_1,M1-1>
......
[id_N2][MN2:number_of_value_N2]
<value_N2,1><value_N2,2 -value_N2,1>...<value_N2,MN2- value_N2,MN2-1>
図5Aの表(502)の例では、最小の値であるvalue[1]を3列目に設定する。次に、2番目に小さい値であるvalue[2]と最小の値であるvalue[1]の差分を4列目に設定する。以下、同様の処理を繰り返す。最後に、最大の値であるvalue[M]と2番目に大きい値である[M−1]の差分を最終列に設定する。
可変長符号化(Variable−length code)法は、ハフマン符号化、ランレングス符号化、算術符号化及び適応ビット割当に分けられる。
ガンマ符号化(Gamma code)法は、整数を2進数で表現し、そのビット数から1を引いた数の「0」と、整数を2進数で表現した値を合わせた値を、出力する手法である。
ゴーロム符号化(Golumb code)法は、次の三つの手順により構成される。
1.はじめに、floor(n/m)を計算し、このunarycodeを出力する。ここで、floor(x)はxを上回らない最大整数、また正数aのunary codeはa個の“0”とそれに続く1個の“1”から構成される符号“00・・・01”、をそれぞれ表す。
2.続いて、n/mの剰余mod(n/m)を計算し、それをfloor(log2(m))桁のバイナリ符号で表したものを出力する。
3.両者をこの順番で結合したものがnのゴーロム符号となる。
表(503)に見られるように、圧縮率はセクションの種類によって異なる。圧縮を行った場合、u2vインデックスファイルのファイル・サイズは、圧縮を行わなかった場合から35%〜52%のサイズを減らしたサイズになる。
最初に、セクションがNounであるノード(410、412、420及び421)について示す。
ノード(410)のノードidは、2である。従って、表(504)のセクションがNounの行のEntry[1]のノードidの列には、2が設定される。ノード(410)の持つ値は、Internet、PC、phoneの3つである。従って、セクションがNounの行のEntry[1]の値の数の列には、3が設定される。セクションがNounの行のEntry[1]の値の列には、Internet、PC、phoneが設定される。
ノード(412)のノードidは、5である。従って、表(504)のセクションがNounの行のEntry[2]のノードidの列には、5が設定される。ノード(412)の持つ値は、Internet、modemの2つである。従って、セクションがNounの行のEntry[2]の値の数の列には、2が設定される。セクションがNounの行のEntry[2]の値の列には、Internet、modemが設定される。
ノード(420)のノードidは、9である。従って、表(504)のセクションがNounの行のEntry[3]のノードidの列には、9が設定される。ノード(420)の持つ値は、Internet、phoneの2つである。よって、セクションがNounの行のEntry[3]の値の数の列には、2が設定される。セクションがNounの行のEntry[3]の値の列には、Internet、phoneが設定される。
ノード(421)のノードidは、11である。従って、表(504)のセクションがNounの行のEntry[4]のノードidの列には、11が設定される。ノード(421)の持つ値は、Internet、modemの2つである。従って、セクションがNounの行のEntry[4]の値の数の列には、2が設定される。セクションがNounの行のEntry[4]の値の列には、Internet、modemが設定される。
次に、セクションがVerbであるノード(411、422)について示す。
ノード(411)のノードidは、3である。従って、表(504)のセクションがVerbの行のEntry[1]のノードidの列には、3が設定される。ノード(411)の持つ値は、connect、typeの2つである。従って、セクションがVerbの行のEntry[1]の値の数の列には、2が設定される。セクションがVerbの行のEntry[1]の値の列には、connect、typeが設定される。
ノード(422)のノードidは、13である。従って、表(504)のセクションがVerbの行のEntry[2]のノードidの列には、13が設定される。ノード(422)の持つ値は、connect、readの2つである。従って、Verbの行のEntry[2]の値の数の列には、2が設定される。Verbの行のEntry[2]の値の列には、connect、readが設定される。
図6Aは、本発明の実施態様である、relationインデックスの概念スキーマ及び保管の例を示す。relationインデックスの概念スキーマは、セクション・ポインター・ツリー(600)及び表(601、602)で示される。セクション・ポインター・ツリー(600)は、表(601)の各行へのポインタの集合データを示す。表(601)の各行は、1セクション分のインデックスを示す。1列目は、行のサイズである。2列目は、セクションに対応するノードの数である。3列目以降は、セクションに対応するノードの数分のEntryである。表(602)は、Entryの詳細を示す。1列目は、ノードidを示す。2列目は、子孫ノードのノードidのうち、最小のidを示す。
{byte_size_of_array}(N:number_of_nodes)
[id_1][min_id_1][id_2][min_id_2]......[id_N][min_id_N]
上記データフォーマット内の改行は、見易さのためであり、データに含まれない。また、{}、()、[]などの区切りは、論理的なデータの区切りを表示するためのものであり、データに含まれない。{}は非圧縮long(8bytes)を意味する。()は、非圧縮int(4bytes)を意味する。非圧縮とは、2の補数表記による標準的な符号化のことを示す。また、[]は圧縮intを意味する。圧縮は、可変長の符号化でありうる。
byte_size_of_arrayは、先頭の[id_1]から最後の[min_id_N]までのバイト列の長さを示す。Nは、格納されているノードの数を示す。idは、ノードidを示す。アンダーバーの後に続く値は、ノードを識別するために振った表記上の番号である。min_idは、同じ表記上の番号が振られたノードidの子孫ノードのうち、最小のノードidを持つノードのノードidを示す。
セクションがDocumentであるノード(416、427)について考える。対応するインデックスは、表(603)の2行目、セクションが“Document”の行である。ノード(416)のノードidは、7である。従って、表(603)の2列目、「ノードid」に7を設定する。ノード(416)の子孫ノード(410〜415)のうち、最小のノードidを持つノードは、ノード(413)である。ノード(413)のノードidは、1である。従って、表(603)の3列目、「最小のノードid」に1を設定する。ノード(427)のノードidは、15である。従って、表(603)の4列目、「ノードid」に15を設定する。ノード(427)の子孫ノード(420〜426)のうち、最小のノードidを持つノードは、ノード(423)である。ノード(423)のノードidは、1である。従って、表(603)の5列目、「最小のノードid」に8を設定する。
セクションがQuestionであるノード(414、424、425)について考える。対応するインデックスは、表(603)の3行目、セクションが“Question”の行である。ノード(414)のノードidは、4である。従って、表(603)の2列目、「ノードid」に4を設定する。ノード(414)の子孫ノード(410〜411)のうち、最小のノードidを持つノードは、ノード(410)である。ノード(410)のノードidは、2である。従って、表(603)の3列目、「最小のノードid」に2を設定する。ノード(424)のノードidは、10である。従って、表(603)の4列目、「ノードid」に10を設定する。ノード(424)の子孫ノード(420)のうち、最小のノードidを持つノードは、ノード(420)である。ノード(420)のノードidは、9である。従って、表(603)の5列目、「最小のノードid」に9を設定する。ノード(425)のノードidは、12である。従って、表(603)の6列目、「ノードid」に12を設定する。ノード(425)の子孫ノード(421)のうち、最小のノードidを持つノードは、ノード(421)である。ノード(421)のノードidは、11である。従って、表(603)の7列目、「最小のノードid」に11を設定する。
セクションがAnswerであるノード(415、426)について考える。対応するインデックスは、表(603)の4行目、セクションが“Answer”の行である。ノード(415)のノードidは、6である。従って、表(603)の2列目、「ノードid」に6を設定する。ノード(415)の子孫ノード(412)のうち、最小のノードidを持つノードは、ノード(412)である。ノード(412)のノードidは、5である。従って、表(603)の3列目、「最小のノードid」に5を設定する。ノード(426)のノードidは、14である。従って、表(603)の4列目、「ノードid」に14を設定する。ノード(426)の子孫ノード(422)のうち、最小のノードidを持つノードは、ノード(422)である。ノード(422)のノードidは、13である。従って、表(603)の5列目、「最小のノードid」に13を設定する。
セクションがDate、Noun及びVerbであるノード(413、410、411、412、423、420、421及び422)は、子孫ノードを持たない。このような子ノードを持たないノードであるリーフノードに対しては、relationインデックスは作成されない。
図7Aは、本発明の実施態様である、v2uインデックスの概念スキーマ及び保管の例を示す。v2uインデックスの概念スキーマは、セクション・ポインター・ツリー(700)、セクションに対応する数のハッシュ構造(701)及びハッシュ構造に対応する表(702)で示される。セクション・ポインター・ツリー(700)は、セクションごとに用意されたハッシュ構造(701)へのポインタの集合データを示す。ハッシュ構造(701)は、表(702)に示す各行へのポインタの集合データを示す。表(702)の各行は、特定の値毎のインデックスを示す。1列目は、行のサイズである。2列目は、特定の値を有するノードの数である。3列目以降は、特定の値を有するノードのノードidである。本発明の1つの実施態様では、表(702)の3列目以降に含まれるノードidは、u2vインデックスの例と同様に圧縮される。
{byte_size_of_array}(N:number_of_nodes)
<id,1><id,2 - id,1>...<id,N1- id,N1-1>
上記データフォーマット内の改行は、見易さのためであり、データに含まれない。また、{}、()、<>などの区切りは、論理的なデータの区切りを表示するためのものであり、データに含まれない。{}は、非圧縮long(8bytes)を意味する。()は、非圧縮int(4bytes)を意味する。非圧縮とは、2の補数表記による標準的な符号化のことをいう。<>は、差分圧縮intを意味する。圧縮は、可変長の符号化でありうる。
byte_size_of_arrayは、先頭の<id,1>から最後の<id,N1 - id,N1-1>までのバイト列の長さを示す。Nは、格納されているノードの数を示す。idはノードidを示す。カンマの後に続く値は、ノードを識別するために振った表記上の番号である。
セクションがNounであるノード(410、412、420及び421)のうち、値にinternetを持つノードは、ノード(410、412、420及び421)である。従って、表(702)の1行目には、ノード(410、412、420、421)のノードidである、2、5、9、11が設定される。
セクションがNounであるノード(410、412、420及び421)のうち、値にPCを持つノードは、ノード(410)である。従って、表(702)の2行目には、ノード(410)のノードidである、2が設定される。
セクションがNounであるノード(410、412、420及び421)のうち、値にmodemを持つノードは、ノード(412、421)である。従って、表(702)の3行目には、ノード(412、421)のノードidである、5、11が設定される。
セクションがNounであるノード(410、412、420及び421)のうち、値にphoneを持つノードは、ノード(410、420)である。従って、表(802)の4行目には、ノード(410、420)のノードidである、2、9が設定される。
フローチャートで使用する用語を以下に説明する。木構造をTで表す。また、|T|と記載した場合、|T|は、Tの持つノードの個数を表す。木構造(400A)の例では、|T|=7である。ノードをNで表す。ノードNの持つセクションを、N.sectionで表す。ノードNの持つ値を、N.Valuesで表す。ノードNに割り振られたノードidをN.unitIdで表す。また、セクションは、あらかじめ数値に変換されているものとする。例えば、“Document”=1であり、“Question”=2であり、“Noun”=3などである。
ノード(410)の例では、N.sectionは、“Noun”=3であり、N.valuesは、“Internet”、“PC”及び“phone”であり、N.unitIdは2である。
ステップ800では、コンピュータが、変数currentUnitIdを0で初期化する。currentUnitIdは、コンピュータが処理対象の木構造にノードidを割り振る際の初期値を保管する変数である。0での初期化は、最初に振られるノードidが0であることを示す。本発明の1つの実施態様として、値が文字列である場合、該文字列を数値に置き換えることが可能である。
ステップ801では、コンピュータが、処理対象の木構造がまだ存在するかの判定を行う。処理対象の木構造がある場合、ステップ802に進む。全ての木構造について処理済みであれば、ステップ807に進む。
ステップ802では、コンピュータが、後続のステップ(803〜806)で用いる木構造を選択する処理である。後続のステップ(803〜806)は木構造の単位で処理を行う。
ステップ803では、ステップ802で選択した木構造について、コンピュータが、後行順でノードidを割り振る。ノードidの開始値には、currentUnitIdを用いる。
ステップ804では、コンピュータが、Relationインデックスを作成または更新する。Relationインデックス及び該処理については、後述する。
ステップ805では、コンピュータが、u2vインデックスを作成または更新する。u2vインデックス及び該処理については、後述する。ステップ804とステップ805は、どちらのステップを先に実行してもかまわない。
ステップ806では、コンピュータが、変数currentUnitIdに|T|を加える処理を行う。該処理で求めた値は、次に処理対象とする木にノードidを割り振る際の初期値になる。
ステップ807では、コンピュータが、v2uインデックスを作成または更新する。本発明の1つの実施態様として、v2uインデックスを作成または更新後に、上記文字列が数値に置き換えられた値について、該数値を文字列に再び置き換えることが可能である。
ステップ810では、コンピュータが、木のノードを、unitIdの小さい順に並べる。
ステップ811では、コンピュータが、処理対象のノードがまだ残っているかの判定を行う。処理対象のノードがある場合は、ステップ812に進む。全てのノードについて処理済みであれば、処理を終了し、図8Aのステップ805へ進む。
ステップ812では、コンピュータが、木構造TからノードNを取り出す。
ステップ813では、コンピュータが、ステップ812で取り出したノードNの子孫ノードのうち、ノードidが最少のノードを選択する。ここで、ノードidが最少のノードをN´とする。
ステップ814では、コンピュータが、ステップ812で取り出したノードNが持つノードid、及びステップ813で選択したノードN´が持つノードidをrelationインデックスに追加する。追加先は、ノードNに設定されたセクションに対応する個所である。上記追加先は、セクション・ポインター・ツリーから求めることができる。コンピュータは、セクション・ポインター・ツリーから該セクションを指すポインタを取得し、relationインデックスにおいて、そのポインタの指す先の最後尾にノードNが持つノードid及びノードN´が持つノードidを追加すればよい、新規のセクションの場合は、セクション・ポインター・ツリーに、該セクションを指すポインタを追加する。コンピュータは、relationインデックスの設定項目であるノードの数及び行のサイズを更新する。
ステップ820では、コンピュータが、木のノードを、unitIdの小さい順に並べる。
ステップ821では、コンピュータが、処理対象のノードがまだ残っているかの判定を行う。処理対象のノードがある場合は、ステップ822に進む。全てのノードについて処理済みであれば、処理を終了し、図8Aのステップ806へ進む。
ステップ822では、コンピュータが、木構造TからノードNを取り出す。
ステップ823では、コンピュータが、ステップ822で取り出したノードNが持つノードid、値及び値の数をu2vインデックスに追加する。追加先は、ノードNに設定されたセクションに対応する個所である。上記追加先は、セクション・ポインター・ツリーから求めることができる。コンピュータは、セクション・ポインター・ツリーから該セクションを指すポインタを取得し、u2vインデックスにおいて、そのポインタの指す先の最後尾にノードNが持つノードid、値及び値の数を追加すればよい、新規のセクションの場合は、セクション・ポインター・ツリーに、該セクションを指すポインタを追加する。差分圧縮を行う場合は、該ステップで行う。コンピュータは、u2vインデックスの設定項目であるノードの数及び行のサイズを更新する。
ステップ830では、コンピュータが、処理対象のセクションがまだ残っているかの判定を行う。処理対象のセクションがある場合は、ステップ831に進む。全てのセクションについて処理済みであれば、処理を終了する。
ステップ831では、コンピュータが、転置行列Iを作成する。コンピュータは、Section Sを1つ選び、u2vインデックスからセクションSに対応する部分を読み込む。そして、コンピュータは、該読み込んだデータから転置行列Iを作成する。転置行列については後述する。
ステップ832では、コンピュータが、転置行列を書き出す。転置行列とは、u2vインデックス内のデータを、各値に対してその値を含むノードのノードidを保持する形式に変換したものである。転置行列は、検索エンジンのインデックスとして一般的な行列である。上記書き出す処理については後述する。該書き出す処理が終了したら、コンピュータは、再びステップ830に処理を戻す。
コンピュータは、ステップ(830〜832)の処理を、処理するセクションがなくなるまで繰り返す。
表(840)は、あるセクションにおけるu2vインデックス内のデータの例を示す。該データの例は、転置行列に変換する前のデータの例に相当する。表(841)は、表(840)のデータを、転置行列に変換した例を示す。本願発明の1つの実施態様では、表に含まれる値は、数字で表現されうる。
表(840)において、値“Internet”は、ノードidが2、5、9、11の行に含まれる。値“PC”は、ノードidが2の行に含まれる。値“phone”は、ノードidが2、9の行に含まれる。値“modem”は、ノードidが5、11の行に含まれる。値“keyboard”は、ノードidが11の行に含まれる。この関係を表したものが、表(841)で示す転置行列になる。
ステップ850では、コンピュータが、v2uの値ハッシュの初期化を行う。値ハッシュとは、図7Aのハッシュ構造(701)を示す。コンピュータは、空の値ハッシュを新規作成する。コンピュータは、値ハッシュにポインタを設定するための変数であるpointerに、0をセットする。
ステップ851では、コンピュータが、処理対象の値がまだ残っているかの判定を行う。コンピュータは、処理対象の値がある場合は、ステップ852に進む。コンピュータは、全ての値について処理済みであれば、図8Dのステップ830に進む。
ステップ852では、コンピュータが、圧縮リストCL(v)を作成する。圧縮リストCL(v)は、図7Aの表(702)における各行に対応するデータを指す。コンピュータは、値vを1つ選ぶ。コンピュータは、ステップ(831)で作成した転置行列Iから、該値vに対応するノードidを読み出す。コンピュータは、該読み出したノードid、ノードidの数及び、該ノードidと該ノードidの数のサイズを用いて、圧縮リストCL(v)作成する。本発明の1つの実施態様では、該ノードidは差分圧縮される。
ステップ853では、コンピュータが、値ハッシュ及びv2uインデックスにデータを設定する。コンピュータは、値vとpointerの組を、値ハッシュに追加する。
また、コンピュータは、CL(v)をv2uインデックスに追加する。コンピュータは、v2uインデックスが存在しない場合は、v2uインデックスを作成する。
ステップ854では、コンピュータが、pointerにCL(v)のサイズを加える。該ステップの処理が終了したら、コンピュータは、再びステップ851に処理を戻す。
コンピュータは、ステップ(851〜854)の処理を、処理する値がなくなるまで繰り返す。
該フローチャートにおける入力パラメータの定義は、以下の通りである。
検索条件値をvとする。vは例えば、検索エンジンを使うときに用いるキーワードに該当する。例えば、値 “phone”(電話)が該当する。また、単一の値の代わりに、値の任意の論理式を用いることもできる。vの例は、「phone and Internet」である。
検索条件セクションをSsとする。Ssは、vを含むセクションの指定であり、vとのペアで意味を持つ。Ssの例は、「Answerセクションの中に値“phone”が存在するような木に関して集約する。」という場合におけるAnswerセクションである。
ルートセクションをSrとする。Srは、集約対象の木構造のルート・ノードのセクションの指定である。Srの例は、Documentである。
集約対象セクションをSaとする。Saは、集約する値を含むセクションの指定である。Saの例は、「Nounセクションの値を集約する。」場合におけるNounセクションである。
集約単位セクションをScとする。Scは、集約関数を適用する単位の指定であり、Saとのペアで意味を持つ。Scの例は、「Questionセクションの単位で、Nounセクションの値を集約する。」場合における、Questionセクションである。
集約処理の出力は、vと、集約関数fのv上での値f(v)との組(v, f(v))のリストで表される。以下、f(v)=(vのSc単位の出現回数)とする。fとして任意の集約関数を用いることもできる。
ステップ910では、コンピュータが、セクションSsを用いてv2uインデックスの検索を行い、圧縮リスト(以下CL(v))を取得する。1つの実施態様として、該検索はシーケンシャルに行われる。
ステップ911では、コンピュータが、ステップ910で取得したCL(v)を解凍し、ノードidのリスト(以下L(v))を取得する。該ノードidのリストが、第1のリストに対応する。
ステップ912では、コンピュータが、relationインデックスを検索して、セクションSrの行(以下R(Sr))を取得する。1つの実施態様として、該検索は、シーケンシャルに行われうる。
ステップ913では、コンピュータが、L(v)とR(Sr)のマッチングを行い、R(Sr)の部分集合(以下R’(Sr))を取得する。該R’(Sr)が、第2のリストに対応する。
図9Cは、例としてL(v)とR(Sr)とのマッチング処理を示す。L(v)の行に含まれる各数値は、vを持つノードのノードidを示す。例えば、リスト(920)において、ノードidの各数値は、3,7,16,20及び38である。また、R(Sr)の行に含まれる各数値は、セクションSrを持つノードのノードidと、そのノードidを持つノードの子孫ノードのうち最小のノードidを持つノードのノードidの組を示す。例えば、リスト(920)において、(5,1)、(15,10)及び(45,27)の各組が、ノードidの組である。なお、(5,1)という表記は、5がセクションSrのノードidであり、1が、ノードidが5であるノードの子孫ノードの持つノードidのうちの最小のノードidであることを意味する。
他のデータについてのマッチング処理についても上記と同様である。
コンピュータは、カーソル(924)を各リスト(L(v)、R(Sr))の先頭にセットする(921)。
コンピュータは、L(v)のカーソルが指すノードidが、R(Sr)の指す値のペアの範囲に入っているかどうかチェックし、入っていたらそのペアを、メモリー上に保管する。マッチング対象のリスト(921)の例では、3は範囲(5,1)に入っているため、コンピュータは、(5,1)をメモリー上に保管する(921)。
次に、コンピュータは、L(v)のカーソルを、ノードidの値が現在のR(Sr)のペアの範囲を越えるまで(すなわち、7)移動する(922)。
次に、コンピュータは、R(Sr)のカーソルを移動する。
上記を繰り返すことによって、条件を満たすペアがすべて求まる。そのペア全体R’(Sr)とする。図9Cの例では、R’(Sr)={(5,1),(45,27)}である。
ステップ930では、コンピュータは、relationインデックスを検索し、セクションScの行(以下R(Sc))を取得する。該検索はシーケンシャルに行う。
ステップ931では、コンピュータは、R’(Sr)とR(Sc)をマッチングして、R(Sr)の部分集合(以下R’(Sc))を求める。
ステップ932では、コンピュータは、u2vインデックスを検索し、セクションSaの行(以下R(Sa))を取得する。該検索はシーケンシャルアクセスに限らず、下記のランダムアクセスを使用することもできる。該取得したR(Sa)とR’(Sc)とをマッチングする。該マッチングによって、集約計算を行うための検索式の検索条件を満たすvのリストを取得する。該vのリストが第3のリストに対応する。該vのリストを使用して、値の集計を行う。
ステップ932において、コンピュータが、u2vインデックスを検索する場合、シーケンシャルアクセスの他に、ランダムアクセスを使用しうる。はじめの検索条件値vがきつく(厳しい)且つ集計対象のノード数が少ない場合は、シーケンシャルアクセスよりもランダムアクセスのほうが高速な場合がある。
以下に、SrとSaが1:1の場合、記号を以下のように定める
Tk :ランダムアクセスによるu2vインデックスでのシーク時間
Tq :シーケンシャルアクセスによるユニット当たりのリード時間
N :Saのu2vインデックスにおけるユニットの数
Nv : Saのu2vインデックスにおける、検索式を満たすユニットの数
TS及びTRそれぞれをシーケンシャルアクセス及びランダムアクセスの実行時間とすると、以下のように見積もられる。
TS = Tk + N* Tq
TR = Nv * (Tk + Tq)
TS = TR を解くと,切り替えの閾値を与える Nv の値が求まる
Nv 〜 N/ (1 + (Tk/Tq))
ランダムアクセスを行う場合は、ランダムアクセス用インデックスを使用する。ランダムアクセス用インデックスとは、セクション毎に、各ノードidとu2vインデックス内のアクセスしたいEntryの位置をシーケンシャルに保管したものをいう。
ランダムインデックスの概念スキーマが、表(951)で示される。また、表(950)は、前述したu2vインデックスの概念スキーマの表(501)と同一のものである。
表(951)は、ある1つのセクションについての例である。表(951)の各行は、ある1つのセクションに含まれる1つのノードを示す。1列目は、ユニットid(ノードidと同じ)を示す。2列目は、u2vインデックス(950)内において、該ノードの情報を持つEntryの位置を指すPointerを示す。該Pointerは、該当するセクションの先頭からのバイト数で表わされる。1列目、2列目ともに固定長である。例えば、1列目を4バイト、2列目を8バイトとすることができる。
ステップ960は、ステップ930と同じ処理である。ステップ961は、ステップ931と同じ処理である。ステップ962は、ステップ932に対応する。ステップ962とステップ932との違いは、コンピュータが、u2vインデックスを検索する際に、シーケンシャルアクセスではなく、ランダムアクセスインデックスを使用してランダムアクセスをする点のみである。ランダムアクセスインデックスを使用してu2vインデックスを検索する方法は、ランダムアクセスをサポートするインデックスであれば任意のものが使える。例えば、ランダムアクセスインデックス内をノードidに関して二分探索し、Pointerを求める方法、ランダムアクセスインデックス内のノードidをB−treeに当てはめて、Pointerを求める方法がある。コンピュータは、u2vインデックスの各ノードidを読み込む際に、ランダムアクセスを行うことにより、集約の結果に含まれないノードidの読み込みをなくすことができる。
以下では、本発明の実施態様のプロトタイプと、関係データベースとして広く使われているPostgreSQLとの性能を比較した結果を示す。性能比較は、2種類のデータを用いて行った。該データは、PCコールセンターのログ・データ及び、生命科学のデータである。ここで、PCコールセンターのログ・データを用いて行った比較を実験1、生命科学のデータを用いて行った比較を実験2とする。
PostgreSQLのテーブルスキーマは、現在広く用いられる細分化手法で作成する。また、該テーブルスキーマは、高速化のために必要最小限のデータを扱うのに適した構造にする。具体的には、PostgreSQLのテーブルは、セクションごとに作成した。該テーブルは、2つのINT列を持つ。セクションがDocument、Question及びAnswerのノードに対応するテーブル列には、親ノードのノードidとノードidを設定した。セクションが、Document、Question及びAnswer以外のノードに対応するテーブル列には、親ノードのノードidと値を設定した。値が複数個ある場合は、値分のレコードを用意した。また、全てのテーブルに対して、1列目から2列目、及び2列目から1列目の両方向にB−treeインデックスを張った。
実験1で使用したコンピュータは、Pentium(商標)4 3GHzのCPUを2台、及び3ギガバイトのメモリーを含む。また、該コンピュータのOSは、Linux RHEL3.0である。
図10Bは、実験1で使用した9種類のクエリを示す。表(1001)の「・・・のどこかに・・・」という表現は、「あるセクションを持つノードの子孫ノードのどこかに」という意味である。また、集計対象のスコアは、すべてcountである。なお、表(1001)で、vとして用いた値には、頻度がそれぞれ45437、16293、1340と違うものを使用した。ここで頻度とは、セクションがdocumentのノードを単位とした頻度である。頻度にばらつきを持たせたのは、検索条件を変化させたときにパフォーマンスがどのように変わるかを見るのが目的である。
また、表(1001)の各クエリと対応するSQLを以下に示す。該SQLは、該クエリをPostgreSQL用に変換したものである。
Q1:
select x.value, count(distinct z.value) as freq from L12 as x, B8 as z where x.pid = z.value group by x.value order by freq desc
Q2-1、Q2-2、Q2-3、Q2-4:
select x.value, count(distinct z.value) as freq from L12 as x, L12 as y, B8 as z where x.pid=z.value and y.pid=z.value and y.value=V group by x.value order by freq desc
ここで、y.value=VのVには、検索キーワードに対応するキーワードIDが入る。
Q3-1、Q3-2、Q3-3、Q3-4:
select x.value, count(distinct w.value) as freq from L12 as x, L12 as y, M9 as v, M19 as w, B8 as z where x.pid=w.value and w.pid=z.value and z.value=v.pid and v.value=y.pid and y.value=V group by x.value order by freq desc
ここで、y.value=VのVには、検索キーワードに対応するキーワードIDが入る。
また、B8、M9、M19及びL12は、それぞれ“Document”、“Question”、“Answer”及び“Noun”のセクションに対応するテーブルを表す。
実験1の結果より、シーケンシャルアクセスを用いた集約の性能は、検索の種類に依存しないことが分かる。また、PostgreSQLを用いた集約は、特定の検索を行う場合にのみ優れていることがわかる。これは、B+−Treeを実装するランダムアクセスによるものである。
実験2で使用した、PostgreSQLのテーブルスキーマ、クエリ及び該クエリに対応するSQLは、実験1の“Question”が“Title”に及び実験1の“Answer”が“AbstractText”に変わる以外は、実験1で使用したそれらと同じである。ただし、キーワードの値は、生命科学のデータから実験に適した任意のものを使用した。実験2で使用したコンピュータの構成は、実験1で使用したものと同じである。
以上の実験結果より、本発明の実施形態の有効性がわかる。本発明の実施形態の1つであるシーケンシャルアクセスを用いた場合に、集約にかかる時間がほぼ一定である理由は、ほとんどの時間がインデックスのシーケンシャルリードに費やされているからである。シーケンシャルリードは、検索条件に依存しない。PostgreSQLでは、検索条件が強いほどselectivityが効いて高速になっているが、もっとも良く効いている場合でも本発明の実施形態の1つであるシーケンシャルアクセスに比べて2倍以上遅い。
本発明の実施形態は、インデックス構築にかかる時間についても、RDBにおけるインデックス構築処理よりも速い。
Claims (23)
- 少なくとも1つのノードを含む少なくとも1つの木構造のデータに対する集約計算を行うために、インデックスを作成するコンピュータ・システムであって、前記ノードのそれぞれは該ノードの種類を示す1つのラベル及び0個以上の値を含み、
前記コンピュータ・システムが、
前記ノードそれぞれに後行順(post-order)でノードidを割り振るノードid割振部と、
前記ノードそれぞれのノードidと、該ノードに含まれる値とを含む1以上の組のデータを有するところの第1のインデックスを作成する第1のインデックス作成部であって、該1以上の組のデータは前記ラベル毎に作成される、前記第1のインデックス作成部と、
前記ノードそれぞれのノードidと、該ノードの少なくとも1つの子孫ノードの間で最小のノードidを有する子孫ノードのノードidとを含む1以上の組のデータを有するところの第2のインデックスを作成する第2のインデックス作成部であって、該1以上の組のデータは前記ラベル毎に作成される、前記第2のインデックス作成部と、
特定の値を含む1以上のノードのノードidを含む1以上の組のデータを有する第3のインデックスを作成する第3のインデックス作成部であって、該1以上の組のデータは前記ラベル毎の前記特定の値毎に作成される、前記第3のインデックス作成部と
を含む、前記コンピュータ・システム。 - 前記第1のインデックスが、前記ノードそれぞれのノードidと、該ノードに含まれる値とを含む組のデータをシーケンシャルに格納したファイルである、請求項1に記載のコンピュータ・システム。
- 前記第2のインデックスが、前記ノードそれぞれのノードidと、該ノードの少なくとも1つの子孫ノードの間で最小のノードidを有する子孫ノードのノードidとを含む組のデータをシーケンシャルに格納したファイルである、請求項1に記載のコンピュータ・システム。
- 前記第3のインデックスが、前記特定の値を含む1以上のノードのノードidを含む1以上の組のデータをシーケンシャルに格納したファイルである、請求項1に記載のコンピュータ・システム。
- 前記ラベルのそれぞれにラベルidを割り振るラベルid割振部をさらに含む、請求項1に記載のコンピュータ・システム。
- 前記ノードそれぞれのノードidと、該ノードidそれぞれに関連付けられたポインタとを含む組のデータが格納されている第4のインデックス作成部をさらに含み、前記ポインタは前記第1のインデックスを成す前記1以上の組のデータにおけるノードidのデータの位置を示す、請求項1に記載のコンピュータ・システム。
- 少なくとも1つのノードを含む少なくとも1つの木構造のデータに対する集約計算を行うコンピュータ・システムであって、前記ノードのそれぞれは該ノードの種類を示す1つのラベル及び0個以上の値を含み、前記ノードのそれぞれは後行順(post-order)でノードidを割り振られており、
前記コンピュータ・システムが、
集約計算を行うための検索式を受信する受信部と
前記検索式の検索対象である値を用い及び、特定の値を含む1以上のノードのノードidを含む1以上の組のデータを有するインデックスを用いて、前記検索式の検索対象である前記値を有する1以上のノードのノードidを含む第1のリストを取得する第1のリスト取得部であって、該1以上の組のデータは前記ラベル毎の前記特定の値毎に作成される、前記第1のリスト取得部と、
前記取得した第1のリストを用い及び、前記ノードそれぞれのノードidと、該ノードの少なくとも1つの子孫ノードの間で最小のノードidを有する子孫ノードのノードidとを含む1以上の組のデータを有するところのインデックスを用いて、前記検索式の検索対象である前記値を有する1以上のノードを子孫に持つ各木構造のルート・ノードの1以上のルート・ノードidを含む第2のリストを取得する第2のリスト取得部であって、該1以上の組のデータは前記ラベル毎に作成される、前記第2のリスト取得部と、
前記取得した第2のリストに基づいて、前記検索式の検索対象である前記値を検索する検索部であって、前記検索式の検索対象である前記値が少なくとも1つのキーワードに対応する、前記検索部と
を含む、前記コンピュータ・システム。 - 前記取得した第2のリストを用いて及び、前記ノードそれぞれのノードidと、該ノードに含まれる値とを含む1以上の組のデータを有するところのインデックスを用いて、前記検索式の検索条件を満たす、1以上のノードの1以上の値を含む第3のリストを取得する第3のリスト取得部であって、該1以上の組のデータは前記ラベル毎に作成される、前記第3のリスト取得部と、
前記取得した第3のリストに基づいて、前記検索式の結果を求める計算部と
をさらに含む、請求項7に記載のコンピュータ・システム。 - 中央演算処理ユニット、メモリー及び木構造のデータを記憶する記憶部を有するコンピュータ・システムにおいて、少なくとも1つのノードを含む少なくとも1つの木構造のデータに対する集約計算を行うために、インデックスを作成する方法であって、前記ノードそれぞれは該ノードの種類を示す1つのラベル及び0個以上の値を含み、
前記方法が、前記中央演算処理ユニットに下記ステップを実行させることを含み、該方法が、
前記ノードの情報を前記メモリー内に読み込み、前記情報を読み込んだノードそれぞれに後行順(post-order)でノードidを割り振るステップと、
前記ノードそれぞれのノードidと、該ノードに含まれる値とを含む1以上の組のデータを有するところの第1のインデックスを作成し、該作成した第1のインデックスを前記記憶部に格納するステップであって、該1以上の組のデータは前記ラベル毎に作成される、前記第1のインデックスを格納するステップと、
前記ノードそれぞれのノードidと、該ノードの少なくとも1つの子孫ノードの間で最小のノードidを有する子孫ノードのノードidとを含む1以上の組のデータを有するところの第2のインデックスを作成し、該作成した第2のインデックスを前記記憶部に格納するステップであって、該1以上の組のデータは前記ラベル毎に作成される、前記第2のインデックスを格納するステップと、
特定の値を含む1以上のノードのノードidを含む1以上の組のデータを有する第3のインデックスを作成し、該作成した第3のインデックスを前記記憶部に格納するステップであって、該1以上の組のデータは前記ラベル毎の前記特定の値毎に作成される、前記第3のインデックスを格納するステップと
を含む、前記方法。 - 前記第1のインデックスを前記記憶部に格納するステップが、前記ノードそれぞれのノードidと、該ノードに含まれる値とを含む組のデータをシーケンシャルに格納するステップをさらに含む、請求項9に記載の方法。
- 前記第2のインデックスを前記記憶部に格納するステップが、前記ノードそれぞれのノードidと、該ノードの少なくとも1つの子孫ノードの間で最小のノードidを有する子孫ノードのノードidとを含む組のデータをシーケンシャルに格納するステップをさらに含む、請求項9に記載の方法。
- 前記第3のインデックスを前記記憶部に格納するステップが、前記特定の値を含む1以上のノードのノードidを含む1以上の組のデータをシーケンシャルに格納するステップをさらに含む、請求項9に記載の方法。
- 前記方法が、前記中央演算処理ユニットに下記ステップをさらに実行させることを含み、該方法が、
前記ラベルのそれぞれにラベルidを割り振るステップを含む、請求項9に記載の方法。 - 前記方法が、前記中央演算処理ユニットに下記ステップをさらに実行させることを含み、該方法が、
前記第1のインデックスにおける値又は前記第3のインデックスにおけるノードidを圧縮するステップを含む、請求項9に記載の方法。 - 前記方法が、前記中央演算処理ユニットに下記ステップをさらに実行させることを含み、該方法が、
前記第1のインデックスを作成する前に、前記値が文字列である場合、該文字列を数値に置き換えるステップを含む、請求項9に記載の方法。 - 前記方法が、前記中央演算処理ユニットに下記ステップをさらに実行させることを含み、該方法が、
前記第3のインデックスを作成した後に、前記置き換えられた数値を、前記文字列にさらに置き換えるステップを含む、請求項15に記載の方法。 - 前記方法が、前記中央演算処理ユニットに下記ステップをさらに実行させることを含み、該方法が、
前記ノードそれぞれのノードidと、該ノードidそれぞれに関連付けられたポインタとを含む組のデータが格納されている第4のインデックスを作成するステップを含み、前記ポインタは前記第1のインデックスを成す前記1以上の組のデータにおけるノードidのデータの位置を示す、請求項9に記載の方法。 - 中央演算処理ユニット、メモリー及び木構造のデータを記憶する記憶部を有するコンピュータ・システムにおいて、少なくとも1つのノードを含む少なくとも1つの木構造のデータに対する集約計算を行う方法であって、前記ノードそれぞれは該ノードの種類を示す1つのラベル及び0個以上の値を含み、前記ノードそれぞれは後行順(post-order)でノードidを割り振られており、
前記方法が中央演算処理ユニットに下記ステップを実行させるステップを含み、
該方法が、
集約計算を行うための検索式を受信し、該受信した検索式を前記メモリー内に記憶するステップと、
前記検索式の検索対象である値を用い及び、特定の値を含む1以上のノードのノードidを含む1以上の組のデータを有するインデックスを用いて、前記検索式の検索対象である前記値を有する1以上のノードのノードidを含む第1のリストを取得し、該取得した第1のリストを前記記憶部に記憶するステップであって、該1以上の組のデータは前記ラベル毎の前記特定の値毎に作成される、前記第1のリストを記憶するステップと、
前記取得した第1のリストを用い及び、前記ノードそれぞれのノードidと、該ノードの少なくとも1つの子孫ノードの間で最小のノードidを有する子孫ノードのノードidとを含む1以上の組のデータを有するところのインデックスを用いて、前記検索式の検索対象である前記値を有する1以上のノードを子孫に持つ各木構造のルート・ノードの1以上のルート・ノードidを含む第2のリストを取得し、該取得した第2のリストを前記記憶部に記憶するステップであって、該1以上の組のデータは前記ラベル毎に作成される、前記第2のリストを記憶するステップと、
前記取得した第2のリストに基づいて、前記検索式の検索対象である前記値を検索するステップであって、前記検索式の検索対象である前記値が少なくとも1つのキーワードに対応する、前記検索するステップと
を含む、前記方法。 - 前記方法が、前記中央演算処理ユニットに下記ステップをさらに実行させることを含み、該方法が、
前記取得した第2のリストを用い及び、前記ノードそれぞれのノードidと、該ノードに含まれる値とを含む1以上の組のデータを有するところのインデックスを用いて、前記検索式の検索条件を満たす、1以上のノードの1以上の値を含む第3のリストを取得し、該取得した第3のリストを前記記憶部に記憶するステップであって、該1以上の組のデータは前記ラベル毎に作成される、前記第3のリストを記憶するステップと、
前記取得した第3のリストに基づいて、前記検索式の結果を求めるステップと
をさらに含む、請求項18に記載の方法。 - 前記第3のリストが、前記ノードそれぞれのノードidと、該ノードに含まれる値とを含む1以上の組のデータを有するところのインデックスを用いてシーケンシャルアクセスにより取得される、請求項19に記載の方法。
- 前記第3のリストが、前記ノードそれぞれのノードidと、該ノードに含まれる値とを含む1以上の組のデータを有するところのインデックス、及び前記ノードそれぞれのノードidと、該ノードidそれぞれに関連付けられたポインタとを含む組のデータが格納されているインデックスを用いてランダムアクセスにより取得される、請求項19に記載の方法。
- 前記第3のリストの一部が、前記ノードそれぞれのノードidと、該ノードに含まれる値とを含む1以上の組のデータを有するところのインデックスを用いてシーケンシャルアクセスにより取得され、及び
前記第3のリストの残りが、前記ノードそれぞれのノードidと、該ノードに含まれる値とを含む1以上の組のデータを有するところのインデックス、及び前記ノードそれぞれのノードidと、該ノードidそれぞれに関連付けられたポインタとを含む組のデータが格納されているインデックスを用いてランダムアクセスにより取得され、
前記第3のリストが、前記シーケンシャルアクセスと前記ランダムアクセスとを切り替えることによって取得される、請求項19に記載の方法。 - 中央演算処理ユニット、メモリー及び木構造のデータを記憶する記憶部を有するコンピュータ・システムにおいて、少なくとも1つのノードを含む少なくとも1つの木構造のデータに対する集約計算を行う方法であって、前記ノードそれぞれは該ノードの種類を示す1つのラベル及び0個以上の値を含み、
前記方法が、前記中央演算処理ユニットに下記ステップを実行させることを含み、該方法が、
前記ノードの情報を前記メモリー内に読み込み、前記情報を読み込んだノードそれぞれに後行順(post-order)でノードidを割り振るステップと、
前記ノードそれぞれのノードidと、該ノードに含まれる値とを含む1以上の組のデータを有するところの第1のインデックスを作成し、該作成した第1のインデックスを前記記憶部に格納するステップであって、該1以上の組のデータは前記ラベル毎に作成される、前記第1のインデックスを格納するステップと、
前記ノードそれぞれのノードidと、該ノードの少なくとも1つの子孫ノードの間で最小のノードidを有する子孫ノードのノードidとを含む1以上の組のデータを有するところの第2のインデックスを作成し、該作成した第2のインデックスを前記記憶部に格納するステップであって、該1以上の組のデータは前記ラベル毎に作成される、前記第2のインデックスを格納するステップと、
特定の値を含む1以上のノードのノードidを含む1以上の組のデータを有する第3のインデックスを作成し、該作成した第3のインデックスを前記記憶部に格納するステップであって、該1以上の組のデータは前記ラベル毎の前記特定の値毎に作成される、前記第3のインデックスを格納するステップと、
前記メモリー内に記憶した集約計算を行うための検索式の検索対象である値及び前記第3のインデックスを用いて、前記検索式の検索対象である前記値を有する1以上のノードのノードidを含む第1のリストを取得し、該取得した第1のリストを前記記憶部に記憶するステップと、
前記取得した第1のリスト及び前記第2のインデックスを用いて、前記検索式の検索対象である前記値を有する1以上のノードを子孫に持つ各木構造のルート・ノードの1以上のルート・ノードidを含む第2のリストを取得し、該取得した第2のリストを前記記憶部に記憶するステップと、
前記取得した第2のリスト及び前記第1のインデックスを用いて、前記検索式の検索条件を満たす、1以上のノードの1以上の値を含む第3のリストを取得し、該取得した第3のリストを前記記憶部に記憶するステップと、
前記取得した第3のリストに基づいて、前記検索式の結果を求めるステップと
を含む、前記方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008148798A JP5220483B2 (ja) | 2008-06-06 | 2008-06-06 | 木構造のデータに対する集約計算を行うコンピュータ・システム、並びにその方法及びコンピュータ・プログラム |
US12/477,975 US8140546B2 (en) | 2008-06-06 | 2009-06-04 | Computer system for performing aggregation of tree-structured data, and method and computer program product therefor |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008148798A JP5220483B2 (ja) | 2008-06-06 | 2008-06-06 | 木構造のデータに対する集約計算を行うコンピュータ・システム、並びにその方法及びコンピュータ・プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2009294967A true JP2009294967A (ja) | 2009-12-17 |
JP5220483B2 JP5220483B2 (ja) | 2013-06-26 |
Family
ID=41401222
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008148798A Expired - Fee Related JP5220483B2 (ja) | 2008-06-06 | 2008-06-06 | 木構造のデータに対する集約計算を行うコンピュータ・システム、並びにその方法及びコンピュータ・プログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US8140546B2 (ja) |
JP (1) | JP5220483B2 (ja) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102008059204B9 (de) * | 2008-11-27 | 2011-05-05 | Infineon Technologies Ag | Verfahren zum Suchen eines Slave-Knotens in einem Kommunikationsnetz, Master-Knoten und Slave-Knoten für ein Kommunikationsnetz |
US9348834B2 (en) * | 2013-07-03 | 2016-05-24 | International Business Machines Corporation | Effective method to compress tabular data export files for data movement |
US9639818B2 (en) * | 2013-08-30 | 2017-05-02 | Sap Se | Creation of event types for news mining for enterprise resource planning |
US10191946B2 (en) | 2015-03-11 | 2019-01-29 | International Business Machines Corporation | Answering natural language table queries through semantic table representation |
CN110245136B (zh) * | 2019-05-06 | 2023-07-28 | 创新先进技术有限公司 | 数据检索方法及装置、设备及存储设备 |
CN110825733B (zh) * | 2019-10-08 | 2022-08-09 | 华中科技大学 | 一种面向多采样流的时间序列数据管理方法及系统 |
CN110795526B (zh) * | 2019-10-29 | 2022-08-12 | 北京林业大学 | 一种用于检索系统的数学公式索引创建方法与系统 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07225770A (ja) * | 1994-02-10 | 1995-08-22 | Fuji Xerox Co Ltd | データ検索装置 |
JPH11242627A (ja) * | 1998-02-25 | 1999-09-07 | Nippon Telegr & Teleph Corp <Ntt> | データアクセス方法およびプログラムを記録した媒体 |
JPH11306203A (ja) * | 1998-04-20 | 1999-11-05 | Intec Inc | インデックス作成方法及び文書検索処理方法 |
JP2001034618A (ja) * | 1999-07-16 | 2001-02-09 | Fujitsu Ltd | Xmlデータ検索処理方法および検索処理システム |
JP2004152259A (ja) * | 2002-10-31 | 2004-05-27 | Nec Soft Ltd | 構造化自然言語問い合わせおよび知識システム |
US20050055355A1 (en) * | 2003-09-05 | 2005-03-10 | Oracle International Corporation | Method and mechanism for efficient storage and query of XML documents based on paths |
US20060085561A1 (en) * | 2004-09-24 | 2006-04-20 | Microsoft Corporation | Efficient algorithm for finding candidate objects for remote differential compression |
JP2008071362A (ja) * | 2000-11-30 | 2008-03-27 | Coppereye Ltd | データベース |
JP2008112240A (ja) * | 2006-10-30 | 2008-05-15 | S Grants Co Ltd | ビット列検索方法及びプログラム |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7287033B2 (en) * | 2002-03-06 | 2007-10-23 | Ori Software Development, Ltd. | Efficient traversals over hierarchical data and indexing semistructured data |
US7330848B2 (en) * | 2003-05-23 | 2008-02-12 | Microsoft Corporation | Method and apparatus for generating statistics on query expressions for optimization |
JP4172801B2 (ja) | 2005-12-02 | 2008-10-29 | インターナショナル・ビジネス・マシーンズ・コーポレーション | テキストからキーワードを検索する効率的なシステム、および、その方法 |
-
2008
- 2008-06-06 JP JP2008148798A patent/JP5220483B2/ja not_active Expired - Fee Related
-
2009
- 2009-06-04 US US12/477,975 patent/US8140546B2/en not_active Expired - Fee Related
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07225770A (ja) * | 1994-02-10 | 1995-08-22 | Fuji Xerox Co Ltd | データ検索装置 |
JPH11242627A (ja) * | 1998-02-25 | 1999-09-07 | Nippon Telegr & Teleph Corp <Ntt> | データアクセス方法およびプログラムを記録した媒体 |
JPH11306203A (ja) * | 1998-04-20 | 1999-11-05 | Intec Inc | インデックス作成方法及び文書検索処理方法 |
JP2001034618A (ja) * | 1999-07-16 | 2001-02-09 | Fujitsu Ltd | Xmlデータ検索処理方法および検索処理システム |
JP2008071362A (ja) * | 2000-11-30 | 2008-03-27 | Coppereye Ltd | データベース |
JP2004152259A (ja) * | 2002-10-31 | 2004-05-27 | Nec Soft Ltd | 構造化自然言語問い合わせおよび知識システム |
US20050055355A1 (en) * | 2003-09-05 | 2005-03-10 | Oracle International Corporation | Method and mechanism for efficient storage and query of XML documents based on paths |
US20060085561A1 (en) * | 2004-09-24 | 2006-04-20 | Microsoft Corporation | Efficient algorithm for finding candidate objects for remote differential compression |
JP2008112240A (ja) * | 2006-10-30 | 2008-05-15 | S Grants Co Ltd | ビット列検索方法及びプログラム |
Also Published As
Publication number | Publication date |
---|---|
US8140546B2 (en) | 2012-03-20 |
US20090307214A1 (en) | 2009-12-10 |
JP5220483B2 (ja) | 2013-06-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9710517B2 (en) | Data record compression with progressive and/or selective decomposition | |
TWI676903B (zh) | 藉由從駐存在內容相關篩中之主要資料元件取得資料的資料之無損縮減 | |
Wu et al. | Optimizing bitmap indices with efficient compression | |
JP5220483B2 (ja) | 木構造のデータに対する集約計算を行うコンピュータ・システム、並びにその方法及びコンピュータ・プログラム | |
Sidirourgos et al. | Column imprints: a secondary index structure | |
Almodaresi et al. | An efficient, scalable, and exact representation of high-dimensional color information enabled using de Bruijn graph search | |
Jiang et al. | Exact top-k nearest keyword search in large networks | |
Hsu et al. | Space-efficient data structures for top-k completion | |
JP5950285B2 (ja) | 予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うための方法、並びに、当該命令を使用してツリーの検索を行うためのコンピュータ及びそのコンピュータ・プログラム | |
Wang et al. | MILC: Inverted list compression in memory | |
JP2008287723A (ja) | 繰り返し値を有するテーブルのブロック圧縮 | |
TWI709047B (zh) | 對其已使用主要資料篩而被無損減少的資料履行多維搜尋、內容相關擷取、及關鍵字為基的搜尋和擷取 | |
TWI720086B (zh) | 儲存在區塊處理儲存系統上的音頻資料和資料的縮減 | |
TW202147787A (zh) | 利用主要資料的局部性來有效率檢索已使用主要資料篩而被無損地縮減的資料 | |
EP3173947A1 (en) | Paged inverted index | |
Wang et al. | Rencoder: A space-time efficient range filter with local encoder | |
EP2881870A1 (en) | Data compression method | |
US11520763B2 (en) | Automated optimization for in-memory data structures of column store databases | |
JP5194856B2 (ja) | コンパクトな決定図を用いた効率的インデックス付け | |
Firth et al. | TAPER: query-aware, partition-enhancement for large, heterogenous graphs | |
Carter et al. | Nanosecond indexing of graph data with hash maps and VLists | |
EP4024226A1 (en) | Query tree labeling and processing | |
Wang et al. | KeyLabel algorithms for keyword search in large graphs | |
Konow et al. | Inverted treaps | |
Anjos et al. | SJSON: A succinct representation for JavaScript object notation documents |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20110223 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20120727 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20120807 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20120808 Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20120808 |
|
TRDD | Decision of grant or rejection written | ||
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20130215 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20130215 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20130215 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20130306 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20160315 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |