(58)【調査した分野】(Int.Cl.,DB名)
請求項1に記載のシステムであって、前記クエリプロセッサは、更に、前記認証されたドキュメントネームスペースの識別子に基づいて、前記認証されたドキュメントネームスペースが割り当てられたインデックスシャードを格納する、前記複数のインデックスサーバのインデックスサーバを識別し、前記識別されたインデックスサーバに前記検索クエリを送信するように構成される、システム。
請求項1に記載のシステムであって、前記複数のインデックスシャードのうちのインデックスシャードは、インデックストークンの辞書と複数の対応する登録リストとを含み、前記複数の登録リストの登録リストは1つ以上のドキュメントの識別子を含み、前記1つ以上のドキュメントの識別子のドキュメントの識別子は、前記ドキュメントの識別子によって識別されるドキュメントが属すドキュメントネームスペースの識別子と関連付けられる、システム。
請求項1に記載のシステムであって、前記クエリプロセッサは、更に、前記ドキュメントの識別子によって識別されるどのドキュメントが前記認証されたドキュメントネームスペースに属すかを判定するために、前記認証されたドキュメントネームスペースの識別子と、前記複数のインデックスシャードにおけるインデックスシャードの登録リスト内にあるドキュメントの識別子に関連付けられたドキュメントネームスペースの識別子とを比較するように構成される、システム。
請求項1に記載のシステムであって、更に、前記認証されたユーザの前記エンドユーザコンピューティングデバイスからの要求において前記検索クエリを受信する手段であって、前記要求は前記認証されたドキュメントネームスペースの識別子をも含む、受信する手段を含む、システム。
複数のインデックスサーバにおいて複数のインデックスシャードを格納するマルチユーザコンピュータシステムであって、前記複数のインデックスシャードの各インデックスシャードは複数のドキュメントをインデックス化するものであり、前記複数のドキュメントのうちの、前記各インデックスシャードによってインデックス化される各ドキュメントは、複数のドキュメントネームスペースのうちの1つの個別のドキュメントネームスペースに属し、前記1つの個別のドキュメントネームスペースは前記各インデックスシャードと関連付けられる、マルチユーザコンピュータシステムにおける、個人用検索の方法であって、
認証されたユーザのエンドユーザコンピューティングデバイスから検索クエリを受信することと、
前記認証されたユーザがアクセスを許可される認証されたドキュメントネームスペースを決定することと、
前記検索クエリを満たしかつ前記認証されたドキュメントネームスペースに属すドキュメントを特定するために、前記認証されたドキュメントネームスペースの識別子に基づいて前記検索クエリに対する回答を限定することと、
を含む、方法。
請求項8に記載の方法であって、前記複数のインデックスシャードのうちのインデックスシャードは、インデックストークンの辞書と複数の対応する登録リストとを含み、前記複数の登録リストの登録リストは1つ以上のドキュメントの識別子を含み、前記1つ以上のドキュメントの識別子のドキュメントの識別子は、前記ドキュメントの識別子によって識別されるドキュメントが属すドキュメントネームスペースの識別子と関連付けられる、方法。
請求項8に記載の方法であって、更に、前記ドキュメントの識別子によって識別されるどのドキュメントが前記認証されたドキュメントネームスペースに属すかを判定するために、前記認証されたドキュメントネームスペースの識別子と、前記複数のインデックスシャードにおけるインデックスシャードの登録リスト内にあるドキュメントの識別子に関連付けられたドキュメントネームスペースの識別子とを比較すること、を含む、方法。
1つ以上のコンピュータプログラムであって、1つ以上のコンピューティングデバイスで実行されると、前記1つ以上のコンピューティングデバイスに請求項8から14のいずれか1項に記載の方法を実行させる、コンピュータプログラム。
【発明を実施するための形態】
【0010】
[0018] 以下の詳細な説明において、本開示技術の十分な理解を提供するために、説明の目的で多くの特定事例を記載する。しかしながら、本開示の技術がそれらの特定事例なしで実行されうるということが明らかであろう。他の例では、本開示の技術を不必要に不明りょうにすることを避けるために、既知の構成やデバイスがブロック図の形式で示される。フローチャートに関して、フローチャート内のブロックは方法ステップと、当該方法ステップを実行するための装置要素との両方を表してもよい。手近な特定の実施形態の要件に依存して、対応する装置要素は、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせで構成されてもよい。
【0011】
[0019] 用語“第1の”及び“第2の”などは、種々の要素を説明するためにここで使用されるものの、それらの要素はそれらの用語によって限定されるべきではないことが理解されるであろう。それらの用語は、他の要素から区別するためにのみ使用される。例えば、本発明の範囲から逸脱することなく、第1のデバイスは、第2のデバイスと称されてもよく、同様に、第2のデバイスは第1のデバイスと称されてもよい。第1のデバイスおよび第2のデバイスは両方ともデバイスであるが、同一のデバイスでなくてもよい。
【0012】
[0020] 本明細書で使用される専門用語は特定の実施形態のみを説明する目的であり、特許請求の範囲における請求項の限定を意図するものではない。本明細書及び添付の特許請求の範囲で使用されるように、単数形“a”、“an”及び“the”は、別途明確に言及しない限り、同様に複数形を含むことも意図されている。ここで使用される用語“and/or(〜及び〜少なくとも1つ)”は、1以上の関連する記載の項目の可能な全ての組み合わせを参照し、かつ、包含することも理解されるであろう。用語“含む”、“含んでいる”、“備える”、及び“備えている”の少なくとも1つは、本明細書で使用される場合、記載した特徴、整数、ステップ、動作、要素、及びコンポーネントの少なくとも1つの存在を特定するものの、1つ以上の他の特徴、整数、ステップ、動作、要素、コンポーネント及びそれらのグループの少なくとも1つを除外するわけではないこともさらに理解されるであろう。
【0013】
[0021] 用語“if(であれば)”は、文脈に従って、“when(のとき、の場合)”、“upon(の際に)”、“判定に応じて”又は“検出に応じて”を意味するように解釈されてもよい。同様に、フレーズ“判定した場合”又は“(記載した条件又はイベントが)検出された場合”は、“判定した際に”、“判定に応じて”、“(記載した条件又はイベント)を検出した際に”又は“(記載した条件又はイベント)を検出することに応じて”とを意味するように解釈されてもよい。
【0014】
<概要>
[0022] ドキュメントの検索の個別化のための方法を有するマルチユーザコンピュータシステムについて説明する。ドキュメントは、例えば、クラウドデータストレージサービスに持っているユーザのアカウントに関連付けられたドキュメントのような、ユーザの個人ドキュメントの例を含んでもよい。
【0015】
[0023] 他の態様における本発明の種々の実施形態は、マルチユーザ検索システムにおいて、ユーザ個人のドキュメントにおけるフルテキスト検索、及びファイル名検索を容易にする。
【0016】
[0024] 他の態様における本発明の種々の実施形態は、コンピュータを用いて情報検索の技術分野における改善をもたらす。
【0017】
[0025] 他の態様における本発明の種々の実施形態は、クラウドデータストレージサービスプロバイダによって提供されるマルチユーザクラウドデータストレージサービスを改善する。
【0018】
[0026] 他の態様における本発明の種々の実施形態は、マルチユーザ検索システムの機能構成を改善する。
【0019】
[0027] 本発明に係る実施形態によれば、マルチユーザコンピュータシステムは、複数のインデックスサーバにおいて複数のインデックスシャードを格納する。複数のインデックスシャードの各インデックスシャードは、複数のドキュメントをインデックス化する。インデックスシャードによってインデックス化された、複数のドキュメントにおける各ドキュメントは、インデックスシャードに割り当てられた複数のドキュメントネームスペースの1つに属す。システムは、認証されたユーザから検索クエリを受信することと、認証されたユーザがアクセスを許可される認証されたドキュメントネームスペースを決定することと、検索クエリに回答するとともに、検索クエリを満たしかつ認証されたドキュメントネームスペースに属すドキュメントのみを特定するために、認証されたドキュメントネームスペースの識別子に基づいて検索クエリに対する回答を限定することと、を含む個人検索の方法を実施する。
【0020】
[0028] 本発明に係る他の実施形態では、方法は、認証されたドキュメントネームスペースの識別子に基づいて、認証されたドキュメントネームスペースが割り当てられたインデックスシャードを格納する、複数のインデックスサーバにおけるインデックスサーバを識別し、識別されたインデックスサーバに検索クエリを送信するステップを含む。
【0021】
[0029] 本発明に係る更なる他の実施形態では、方法は、決定論マッピング機能を認証されたドキュメントネームスペースの識別子に適用した結果に基づいて、検索クエリを送信する、複数のインデックスサーバのインデックスサーバを選択すること、を含む。
【0022】
[0030] 本発明に係る更なる他の実施形態では、複数のインデックスシャードのインデックスシャードは、インデックストークンの辞書と複数の対応する登録リストとを含む。各登録リストは、対応するトークンを1つ以上のドキュメントの識別子にマップし、登録リストのドキュメントの識別子のそれぞれは、ドキュメントの識別子によって識別されるドキュメントが属すドキュメントネームスペースの識別子と関連付けられる。
【0023】
[0031] 本発明に係る更なる他の実施形態では、方法は、更に、ドキュメントの識別子によって識別されるどのドキュメントが認証されたドキュメントネームスペースに属すかを判定するために、認証されたドキュメントネームスペースの識別子と、複数のインデックスシャードにおけるインデックスシャードの登録リスト内にあるドキュメントの識別子に関連付けられたドキュメントネームスペースの識別子とを比較するステップ、を含む。
【0024】
[0032] 他の態様において、本発明は、前述したステップを実行するように構成される、コンピュータシステム及びコンピュータで読取可能な媒体を包含する。
【0025】
<基本的なコンピュータシステムハードウェア及びソフトウェア>
[0033] 本開示の技術は、1つ以上のコンピューティングデバイス上で実施されてもよい。そのようなコンピューティングデバイスは、限定はしないが、クライアントコンピュータ、サーバコンピュータ、ネットワークデバイス、モバイルデバイス、セルラー電話、スマートフォン、ラップトップコンピュータ、デスクトップコンピュータ、ワークステーションコンピュータ、携帯情報端末、ブレードサーバコンピュータ、メインフレームコンピュータ、及び他のタイプのコンピュータを含む種々の形式で実装されてもよい。以下で説明するコンピューティングデバイス、及びそれらの接続、関係、及び機能を含むそのコンポーネントは、本明細書で説明する開示技術の実施形態の一例を意味し、当該実施形態を限定する意図はない。本開示の技術を実施するのに適切な他のコンピューティングデバイスは、異なる接続、関係及び機能を有するコンポーネントを含む異なるコンポーネントを含んでもよい。
【0026】
<基本的なコンピューティングデバイス>
[0034] 次に、
図1を参照して、本発明のいくつかの実施形態に従って、本開示の技術を実施するのに適した基本的なコンピューティングデバイス100のブロック図について説明する。コンピューティングデバイス100は、バス102又はメインメモリ106をアドレス解決し、かつ、コンピューティングデバイス100の種々のコンポーネント間で及び種々のコンポーネントの中でデータを転送するための他の通信機構を含む。コンピューティングデバイス100はまた、情報を処理するためのバス102と結合したハードウェアプロセッサ104を含む。ハードウェアプロセッサ104は、一般用途マイクロプロセッサ、システム・オン・チップ(SoC)、又は説明した技術を実施するのに適した他のプロセッサであってもよい。
【0027】
[0035] ランダムアクセスメモリ(RAM)又は他の動的ストレージデバイスなどのメインメモリ106は、情報やプロセッサ104によって実行される命令を格納するためにバス102に結合される。メインメモリ106はまた、プロセッサ104によって実行されるべき命令の実行中に一時変数又は他の中間情報を格納するために使用されてもよい。プロセッサ104へアクセス可能な一時的でない記憶媒体に格納される場合、そのような命令は、コンピュータデバイス100が命令で特定される動作を実行するように、カスタマイズされた特定用途のコンピューティングデバイスへ変換する。
【0028】
[0036] コンピューティングデバイス100はさらに、静的情報及びプロセッサ104への命令を格納するためにバス102に結合された読み取り専用メモリ(ROM)108又は他の静的ストレージデバイスを含む。
【0029】
[0037] 大容量ストレージデバイス110は、磁性式メモリ、光学式メモリ、半導体メモリ、光磁気メモリ、フラッシュメモリ、又は大容量ストレージ技術を利用可能な他のものなどの固定媒体若しくは取り外し可能な媒体に、情報及び命令を永続的に格納するためのバス102に結合される。大容量ストレージデバイスは、ネットワーク上で共有され、或いは、専用の大容量ストレージであってもよい。通常、大容量ストレージデバイス110(例えば、デバイスに対するメインハードディスク)は、オペレーティングシステム、ユーザアプリケーションプログラム、ドライバ、他のサポートファイル、及び全ての種類の他のデータファイルを含む、コンピュータデバイスの動作を方向付けるためのプログラム本体とデータを格納する。
【0030】
[0038] コンピューティングデバイス100は、バス102を介して、情報をコンピュータユーザに表示するための液晶ディスプレイ(LCD)又は他の電子的な視覚ディスプレイなどのディスプレイ112へ結合されうる。ディスプレイ112はまた、タッチジェスチャ(例えば、指又はスタイラス)入力をプロセッサ104へ通知するためのタッチ感知式のディスプレイであってもよい。
【0031】
[0039] アルファベットキー及び他のキーを含む入力デバイス114は、情報及びコマンドの選択をプロセッサ104へ通知するためのバス102へ結合される。
【0032】
[0040] ユーザ入力デバイスの他のタイプは、プロセッサ104へ方向情報やコマンドの選択を通知し、ディスプレイ112上でのカーソルの移動を制御するためのマウス、トラックボール、又はカーソル方向キーなどのカーソル制御部116である。当該入力デバイスは、通常、デバイスが平面上の位置を特定することを許容する第1軸(例えば、x)と第2軸(例えば、y)の二軸の2つの自由度を有する。
【0033】
[0041] コンピューティングデバイス100は、カスタマイズされた配線論理、1以上の特定用途向け集積回路(ASIC)若しくは1以上のフィールドプログラマブルアレイ(FPGA)、ファームウェア、又は、コンピューティングデバイスと協働してコンピューティングデバイス100を特定用途向けの機械とさせる若しくはプログラムするプログラム論理を用いて、ここで説明される方法を実行することができる。
【0034】
[0042] ここで説明する方法は、メインメモリ106に含まれる1以上の命令の1以上のシーケンスを実行するプロセッサ104に応じて、コンピューティングデバイス100によって実行されてもよい。そのような命令は、ストレージデバイス110などの他の記憶媒体からメインメモリ106へと読み込まれてもよい。メインメモリ106に含まれる命令のシーケンスの実行は、プロセッサ104にここで説明する処理ステップを実行させる。代替的な実施形態において、配線回路は、ソフトウェア命令の代わりに、又は、組み合わせで使用され得る。
【0035】
[0043] ここで使用される用語“記憶媒体”は、コンピューティングデバイスを特定の様式で動作させるデータ及び命令の少なくとも1つを格納する非一時的な媒体として参照される。そのような記憶媒体は、不揮発性の媒体及び揮発性の媒体の少なくとも1つを備えてもよい。不揮発性媒体は、ストレージデバイス110などの、例えば、光学ディスク、磁性ディスク、又は半導体ドライバを含む。揮発性媒体はメインメモリ106などの動的メモリを含む。記憶媒体の共通の形式は、例えば、フロッピーディスク、フレキシブル・ディスク、ハードディスク、半導体ドライバ、磁性テープ若しくは任意の他の磁性データ記憶媒体、CD−ROM、任意の他の光学データ記憶媒体、ホールのパターン(空孔)を複数有する任意の物理的な媒体、RAM、PROM及びEPROM、フラッシュEPROM、NVRAM、任意の他のメモリチップ、又はカートリッジを含む。
【0036】
[0044] 記憶媒体は、送信媒体とは区別されるものの、当該送信媒体と連結して使用されてもよい。送信媒体は、記憶媒体間で情報を転送することに使用されてもよい。例えば、送信媒体は、バス102を備える有線を含む同軸ケーブル、銅線、及び光ファイバーを含む。送信媒体はまた、電波及び赤外データ通信中に生成されるものなどの、音波又は光波の形式をとることもできる。
【0037】
[0045] 媒体の種々の形態は、実行するプロセッサ104への1以上の命令の1以上のシーケンスを実行することに用いられてもよい。例えば、命令は、リモートコンピュータの磁性ディスク又は半導体ドライバ上でまず実行されうる。リモートコンピュータは、その動的メモリへ命令をロードし、モデムを用いて電話線を介して命令を送信することができる。コンピューティングデバイス100のローカルなモデムは、電話回線でデータを受信し、データを赤外線信号に変換するための赤外線送信機を用いることができる。赤外線検出機は赤外線信号で運搬されたデータを受信することができ、適切な回路がそのデータをバス102に乗せる。バス102は、プロセッサ104が命令を読み出して実行するメインメモリ106にデータを運搬する。メインメモリ106によって受信される命令は、プロセッサ104によって実行される前又は実行された後の何れかにストレージデバイス110に選択的に格納されうる。
【0038】
[0046] コンピューティングデバイス100はまた、バス102へ結合される通信インタフェース118を含む。通信インタフェース118は、ローカルネットワーク122(例えば、イーサネットネットワーク、無線ローカルエリアネットワーク、セルラー電話ネットワーク、Bluetooth無線ネットワーク、又は同様のもの)へ接続された、有線又は無線のネットワークリンク120へ結合する2つの方法のデータ通信を提供する。通信インタフェース118は、種々のタイプの情報を表すデジタルデータストリームを伝達する電気信号、電磁信号、又は光信号を送受信する。例えば、通信インタフェース118は、有線のネットワークインタフェースカード、一体化された無線アンテナを有する無線ネットワークインタフェースカード、又はモデム(例えば、ISDN、DSL、又はケーブルモデム)であってもよい。
【0039】
[0047] ネットワークリンク120は、通常、1以上のネットワークを通じて、他のデータデバイスへのデータ通信を提供する。例えば、ネットワークリンク120は、ホストコンピュータ124への、又は、インターネットサービスプロバイダ(ISP)126によって操作されるデータ機器へのローカルネットワーク122を通じた接続を提供してもよい。ISP126は順に、”Internet”128として通常参照されるワールド・ワイド・パケットデータ通信ネットワークを通じてデータ通信サービスを提供する。ローカルネットワーク122及びInternet128は、デジタルデータストリームを伝達する電気信号、磁性信号、又は光信号を使用する。コンピューティングデバイス100への及びコンピューティングデバイス100からのデジタルデータを伝達する、種々のネットワークを通じた信号、及び、ネットワークリンク120上の、及び通信インタフェース118を通じた信号は、送信媒体の例示の形式である。
【0040】
[0048] コンピューティングデバイス100は、ローカルネットワーク122、インターネット128、ISP126、ネットワークリンク120、及び通信インタフェース118を通じて、プログラムコードを含む、メッセージを送信し、データを受信することができる。インターネットの一例において、サーバコンピュータ130は、インターネット128、ISP126、ローカルエリアネットワーク122、及び通信インタフェース118を通じて、アプリケーションプログラムに対して要求されるコードを送信するかもしれない。
【0041】
[0049] 受信コードは、受信した際にプロセッサ104によって実行されてもよく、及び、後の実行のためにストレージデバイス110又は他の不揮発性のストレージに格納されてもよく、或いは、そのいずれもが行われてもよい。
【0042】
<基本的なソフトウェアシステム>
[0050] 次に、
図2を参照して、本発明のいくつかの実施形態に従って、コンピューティングデバイス100の動作を制御するための基本的なソフトウェアシステム200のブロック図について説明する。図示するように、コンピュータソフトウェアシステム200は、コンピューティングデバイス100の動作を方向付けるために提供される。システムメモリ(RAM)106及び固定ストレージ(例えば、ハードディスク)110に格納されるソフトウェアシステム200はカーネル又はオペレーティングシステム(OS)210を含む。OS210は、プロセス、メモリ配置、ファイル入力及び出力(I/O)、及びデバイスI/Oの実行を管理することを含む、コンピュータ動作のローレベルの態様を管理する。1以上のアプリケーションプログラム202(例えば、202A、202B、202C・・・202N)は、システム200による実行のために”ロードされ”うる(例えば、固定ストレージ110からメモリ106へ転送される)。いくつかの例において、アプリケーションプログラム202又はデバイス100上での使用を意図した他のソフトウェアはまた、ダウンロード可能で、コンピュータで実行可能な命令のセットとして、例えば、インターネット上の記憶場所から(例えば、ウェブサーバから)ダウンロード及びインストールするために格納されうる。
【0043】
[0051] ソフトウェアシステム200は、グラフィカルな(例えば、”ポイント・アンド・クリック”又は”タッチジェスチャ”)形式で、ユーザコマンド及びデータを受信するためのグラフィカルユーザインタフェース(GUI)215を含んでもよい。これらの入力は順に、オペレーティングシステム210及びアプリケーションプログラム202の少なくとも1つからの命令に従ってシステム200によって作動される。GUI215はまた、ユーザが追加の入力を供給したり、又は、セッションを終了させたりする(例えば、ログオフする)とすぐに、OS210及びアプリケーションプログラム202からの動作結果を表示するように務める。
【0044】
[0052] OS210は、デバイス100のベアハードウェア(例えば、プロセッサ104)上で直接的に実行することができる。代替的に、ハイパーバイザ又は仮想マシンモニタ(VMM)230は、ベアハードウェア及びOS210の間に割り込んで設けられてもよい。この構成において、VMM230はデバイス100のOS210及びベアハードウェアの間のソフトウェア”クッション”又は仮想レイヤとして作動する。
【0045】
[0053] VMM230が存在すれば、仮想マシンインスタンス(例えばゲストマシン)を作成して実行する。各ゲストマシンは、OS210などの”ゲスト”オペレーティングシステムと、ゲストオペレーティングシステム上で実行するように設計された、アプリケーションプログラム202などの1以上のアプリケーションプログラムを含む。VMM230は、仮想オペレーティングプラットフォームを有するゲストオペレーティングシステムを提示し、ゲストオペレーティングシステムの実行を管理する。いくつかの例において、VMM230は、デバイス100のベアハードウェア上で直接実行されているかのように、ゲストオペレーティングシステムを実行することを許容してもよい。これらの例において、ベアハードウェア上で直接的に実行するように構成されたゲストオペレーティングシステムの同一のバージョンはまた、修正又は再構成なしにVMM230上で実行されうる。言い換えれば、VMM230は、いくつかの例において、ゲストオペレーティングシステムへ完全なハードウェアと、CPU仮想化を提供してもよい。他の例において、ゲストオペレーティングシステムは、効率的にVMM230上で実行されるように特別に設計されるか、又は、構成されてもよい。それらの例において、ゲストオペレーティングシステムは、仮想マシンモニタ上で実行する”気付かれるもの”であってもよい。言い換えれば、VMM230は、いくつかの例において、ゲストオペレーティングシステムへ準仮想化を提供することができる。
【0046】
[0054] 上述のコンピュータハードウェア及びソフトウェアは、本開示の技術を実施するために採用されうる基本的な下層のコンピュータコンポーネントを示す目的で提示される。しかしながら、本開示の技術は、任意の特定のコンピューティング環境又はコンピューティングデバイス構成に限定されない。代わりに、本開示の技術は、システムアーキテクチャ、又は、ここで詳細に提示した本開示の技術をサポートすることが可能な処理環境の任意のタイプで実装されてもよい。
【0047】
<クライアント/サーバ マルチユーザ検索システムコンポーネント>
[0055] 次に、
図3を参照し、本発明のいくつかの実施形態に従って、クライアント/サーバシステム300の基本ブロック図について説明する。クライアント/サーバシステム300は、1以上のサーバ320を含む(ここではまとめて”マルチユーザ検索システム320”と称する。)。また、クライアント/サーバシステム300は、ネットワーク330を介して1以上のサーバ325(ここではまとめて”サービングシステム325”と称する。)へ接続された1以上のクライアント310を含む。具体的には、クライアント310は、1以上のサーバ326(ここではまとめて”検索フロントエンド326”と称する。)へ接続された1以上のエンドユーザコンピューティングデバイス311を備える。例示の実施形態において、エンドユーザコンピューティングデバイス311は、MICROSOFT WINDOWS(例えば、XP、VISTA、7、8等)、MAC OS X、LINUX(例えば、UBUNTU、FEDORA等)、IOS、ANDROID、BLACKBERRY OS、及び同等のものなどの従来のオペレーティングシステムを実行する上述のコンピューティングデバイス100などの複数のエンドユーザパーソナルコンピューティングデバイスをそれ自身に備えてもよい。
【0048】
[0056] 例示の実施形態において前述したDROPBOXコンテンツ管理サービスの一部である、サービングシステム325及び1つ以上の他のサーバ321(ここでは、まとめて”ビルドシステム321”と称する。)は、一般的には、UNIX、LINUX及び同様のものなどのサーバオペレーティングシステムの下で実行する、1以上の独立したプロセス(例えば、独立した複数のクライアント)として動作する。ビルドシステム321は、トークン格納部324、インデクサーサーバ323(又は、単に”インデクサー323”)、及びトークナイザ322(又は、単に”トークナイザ322”)を含む。検索フロントエンド326に加えて、サービングシステム325はまた、クエリプロセッサ327及びドキュメントインデックス328を含む。
【0049】
[0057] ビルドシステム321のサーバ及びサービングシステム325のサーバを含むマルチユーザ検索システム320のサーバは、サーバコンピュータ(例えば、
図1のコンピューティングデバイス100)として、又は手近な特定の実施形態の要求に依存した仮想マシンインスタンスとして実現されてもよい。マルチユーザ検索システム320のサーバが仮想マシンインスタンスとして実現される場合には、”仮想”サーバをホストする(実行する)下層のサーバコンピュータであってもよい。しかしながら、仮想サーバとサーバコンピュータとの間において一対一で対応する必要性はない。例えば、サーバコンピュータは複数の仮想サーバをホストすることができる。
【0050】
[0058] 本明細書及び添付の特許請求の範囲で使用される場合、”サーバ(server)”の単数形は、別段の明確な示唆がない限り、複数形を含むことも意図している。例えば、マルチユーザ検索システム320の”サーバ”は、実際には、手近な特定の実施形態の要件に従った、平衡性、フェイルオーバー、冗長性、高可用性、及び他の目的の少なくとも1つのための、互いのミラー又は複製である複数のサーバによって実現されてもよい。
【0051】
[0059] 動作中において、クライアント310は、検索クエリ332を検索フロントエンド326へ送信し、検索フロントエンド326からクエリ回答334を受信する。クエリ332は、ネットワーク要求で検索フロントエンド326において受信されてもよく、当該回答334はネットワーク要求へのネットワーク応答で検索フロントエンド326から送信されてもよい。ネットワーク要求及びネットワーク応答は、ネットワークデータパケットでネットワーク330上で受信/送信されてもよい。本発明のいくつかの実施形態において、ネットワークデータパケットは、インターネットプロトコル(IP)に従ってフォーマットされる。ネットワーク要求及びネットワーク応答はまた、アプリケーションレイヤのネットワークプロトコルに従って受信/送信されてもよい。いくつかの実施形態において、アプリケーションレイヤのネットワークプロトコルは、ハイパーテキスト転送プロトコル(HTTP)又はセキュアハイパーテキスト転送プロトコル(HTTPS)である。例えば、クエリ332は、1以上のHTTP又はHTTPS要求で受信されてもよく、回答334は1以上のHTTP又はHTTP応答で送信されてもよい。
【0052】
[0060] ネットワーク330は、例えば、セルラー電話ネットワーク、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、インターネット及び同様のものなどの多くの従来の有線又は無線ネットワークシステムを含んでもよい。サービングシステム325、ビルドシステム321、及びそれらのサーバはまた、1以上のIPネットワーク及び他の適切な種別のデータ通信ネットワークによって相互に接続されてもよく、HTTP、HTTPS、及び他の適切なアプリケーションレイヤプロトコルの少なくとも1つを用いて互いに通信してもよい。
【0053】
[0061] 検索クエリ332は検索式を含んでもよい。検索式の構文は、1以上のブール演算子(例えば、AND、OR、NOTなど)によって共に関連付けが可能な、1以上の検索トークンのシーケンスを含んでもよい。トークンは、1以上の文字の文字列として定義されてもよい。トークンの文字は、従来の文字符号化手法(例えば、ASCII、UTF-8、及び同等のもの)に従って符号化されてもよい。
【0054】
[0062] クエリのトークンは、検索クエリ332に現れるトークンとして定義されてもよい。例えば、単一の結合クエリ332が[baguette fromage](囲い括弧(enclosing brackets)なしで)の場合を検討する。当該クエリ332を満足するドキュメント340は、トークン“baguette”と、トークン“fromage”との両方を含んでもよく、ドキュメント340の中で互いが隣接する必要はなく、かつドキュメント340の中でトークン“fromage”の前にトークン“baguette”が現れる必要性はない。しかしながら、トークン“baguette”と、トークン“fromage”とを互いに近くに含むか関連付けられ、トークン“fromage”の前にトークン“baguette”を含むか関連付けられるドキュメント340は、クエリ332を満足する他のドキュメント340よりも関連があるものとみなされてもよい。
【0055】
[0063] 検索フロントエンド326からクライアント(例えば、エンドユーザコンピューティングデバイス311A)へ返される検索クエリ332に対するクエリ回答334は、関連性で順序づけられた検索回答の概要のリストを含んでもよい。それぞれのそのような概要は、検索クエリ332を満足するドキュメントインデックス328においてクエリプロセッサ327によって識別されたドキュメント340に対応してもよい。検索回答の概要は、例えば、対応するドキュメントの識別子(例えば、名称、タイトルなど)、対応するドキュメントの短い説明(例えば、概要、要約、抽出、抜粋など)、ダウンロード、閲覧又は対応するドキュメントへのいくつかの他のユーザアクションを行うためのインタラクティブなハイパーリンク(例えば、ユニフォーム・リソース・ロケータ(URL))、及び、対応するドキュメント340について可能な他の有用な情報(例えば、対応するドキュメントのサムネイル画像)を含んでもよい。概要のリストは、エンドユーザのコンピューティングデバイスのユーザへ、エンドユーザのコンピューティングデバイス上で実行するウェブブラウザアプリケーションのウェブページ上で、又は、例えばエンドユーザコンピューティングデバイス上で実行するアプリケーション(例えば、モバイルアプリケーション)のその他のグラフィカルユーザインタフェースで、提示されてもよい。
【0056】
[0064] 検索フロントエンド326で受信される検索クエリ332は、クエリプロセッサ327によって処理されてもよい。クエリプロセッサ327は、検索クエリ332を満足するドキュメントを特定するためにドキュメントインデックス328を調べてもよい。検索クエリ332を満足するクエリプロセッサ327によって特定されるドキュメントへの参照(例えば、ハイパーリンク)は回答334で返されてもよい。以下では、クエリ332を処理するためのクエリプロセッサ327によって実行される本発明のいくつかの実施形態における技術をより詳細に説明する。
【0057】
[0065] いくつかのケースにおいて、検索クエリ332は”コンプリーション(completion)”検索クエリ332である。コンプリーション検索クエリ332は、コンプリートしていないトークンを含む一連の1以上のクエリトークンを含む検索クエリ332として定義されうる。例えば、コンプリーション検索クエリ332は、エンドユーザコンピューティングデバイスのユーザがコンプリーション検索クエリ332のクエリトークンの1つを入力する(例えば、タイピングによって)過程にある(処理中の)場合に、エンドユーザコンピューティングデバイス(例えば、311A)から検索フロントエンド326へ提示されてもよい。この場合、コンプリーションクエリ332への回答334は、クエリプロセッサ327がコンプリーションクエリ332に基づいてドキュメントインデックス328を定義するコンプリーション検索クエリ332に対する可能なコンプリーション要素のリストを含んでもよい。
【0058】
[0066] コンプリートしたコンプリーションクエリ332のクエリトークンは、”コンプリートトークン(complete tokens)”と称する。コンプリートしていないコンプリーションクエリ332のクエリトークンは、”コンプリーショントークン(completion tokens)”と称する。このように、コンプリーションクエリはまた、コンプリーショントークンを含むクエリ332として定義されてもよい。
【0059】
[0067] コンプリーションクエリ332は、単に単一の文字又は一文字より多くの文字を含んでもよい。例えば、コンプリーションクエリ332[p](囲い括弧なし)では、コンプリートトークンは存在せず、トークン”p”はコンプリーショントークンとなりうる。コンプリーションクエリ332は、代わりに、1以上のコンプリートトークンを含んでもよい。例えば、コンプリーションクエリ332[private se](囲い括弧なし)では、トークン”private”がコンプリートトークンであり、トークン”se”はコンプリーショントークンとなりうる。
【0060】
[0068] 典型的には、コンプリーションクエリ332の一連のトークン(又は、列の中にただ一つのトークンがある場合には唯一のトークン)の最後のトークンはコンプリーショントークンである。大抵の場合、これは、ユーザが列に現れるのと同じ順序でコンプリーションクエリ332のトークンを入力するためである。しかしながら、コンプリーションクエリ332の最後のトークンよりも前のトークンがコンプリーショントークンであってもよい。例えば、ユーザは前回入力されたトークンを編集するために彼らのエンドユーザコンピューティングデバイス(例えば、311A)において入力カーソルを動かしてもよい。例えば、ユーザは、最初にクエリ332[solved two problems](囲い括弧なし)を入力してもよい。その後、ユーザは、コンプリーションクエリ[solved th probrems]を生成するために、トークン”two”を”th”で置き換えるように入力カーソルを動かしてもよい。本例示のコンプリーションクエリ332において、第1のトークン”solved”と最後のトークン”problems”とは、コンプリートトークンであってもよく、第2のトークン”th”はコンプリーショントークンであってもよい。
【0061】
[0069] 本発明のいくつかの実施形態において、クエリ332は、クエリ332を含むネットワーク要求において、コンプリーションクエリ332として指定される。例えば、ネットワーク要求は、クエリ332のクエリトークンがコンプリーショントークンであることを示してもよい。コンプリーショントークンの指標は、ユーザのエンドユーザコンピューティングデバイス(例えば、311A)において実行するソフトウェアによって作成されてもよい。例えば、ソフトウェアは、ユーザがユーザのエンドユーザコンピューティングデバイスで提示される検索ユーザインタフェースへ(例えば、物理的なキーボード、又はソフトウェアキーボードで)クエリ332のトークンの文字を入力している際に、フロントエンド326を検索するクエリ332を含むネットワーク要求を送信してもよい。そうすることで、ソフトウェアは、ユーザが入力しているトークンがコンプリーショントークンであることをネットワーク要求(例えば、メタデータ)においてフラグで示すか、印を付けるか、特定するか、さもなければ、示してもよい。本発明のいくつかの実施形態において、ユーザのエンドユーザコンピューティングデバイスで実行するソフトウェアはJAVASCRIPTソフトウェア又は他のウェブブラウザクライアント側のスクリプト言語ソフトウェアであり、検索ユーザインタフェースはユーザのウェブブラウザのウィンドウに表示されるウェブページ上に提示されてもよい。本発明のいくつかの実施形態において、ユーザのエンドユーザコンピューティングデバイスで実行するソフトウェアは、モバイルアプリケーション、又は、ユーザのエンドユーザコンピューティングデバイスにおいて検索ユーザインタフェースを駆動する他の専用のソフトウェアアプリケーションである。
【0062】
[0070] コンプリーション検索クエリ332に対する可能性のあるコンプリーションは、ドキュメントインデックス328によってインデックスが付与された少なくとも1つのドキュメント340によって満足され、かつ、コンプリーションクエリ332をコンプリートする検索クエリ332として定義されてもよい。例えば、ドキュメントインデックス328によってインデックスが付与された少なくとも1つのドキュメント340によって満足される検索クエリ332[solved two problems](囲い括弧なし)は、コンプリーション検索クエリ332[solved two prob](囲い括弧なし)への可能性のあるコンプリーションであってもよい。コンプリーションクエリ332への可能なコンプリーションのリストは、コンプリーションクエリ332を満足するドキュメント340の検索回答の概要のリストへの追加として、又は、その代わりに、回答334で提示されてもよい。以下では、コンプリーションクエリ332を処理するためのクエリプロセッサ327によって採用される本発明のいくつかの実施形態における技術をより詳細に説明する。
【0063】
[0071] コンプリーションクエリ332でないクエリ332は、時には、当該クエリ332をコンプリーションクエリ332から区別するために、”非コンプリーション(non-completion)”クエリ332として参照されてもよい。非コンプリーションクエリ332はまた、コンプリートトークンのみを含み、任意のコンプリーショントークンを含まないクエリ332として定義されてもよい。通常、クエリ332と称する場合、参照は、ここでは前述した”コンプリーション”又は”非コンプリーション”の限定詞なしで、”クエリ332”又は”検索クエリ332”として参照されてもよい。文中で明確に言及しない限り、クエリ332に関連するここでの説明は、通常、コンプリーションクエリ332及び非コンプリーションクエリ332の両方に関連する。
【0064】
[0072] ドキュメント340は、テキストコンテンツを含むデジタル情報(例えば、文字データ)、及びテキストコンテンツに関連付けられるデジタル情報(例えば、テキストメタデータ)の少なくとも1つのデジタル情報の収集物として定義されてもよい。いくつかの例示では、ワード処理ドキュメント340は、大抵の場合、テキストコンテキスト(例えば、ドキュメントの作成者による単語及び文章)を含み、スプレッドシートのドキュメント340は、単語及び数字の形式でのテキストコンテキストを含んでもよく、デジタル画像ドキュメント340(例えば、デジタル写真)は、そのヘッダ(例えば、交換可能な画像ファイル形式(Exif))にテキストコンテンツを含んでもよい。追加的に又は代替的に、デジタル画像ドキュメント340は、画像コンテンツのテキストメタデータのタグ又は他のテキスト記述の形式でテキストコンテンツと関連付けられてもよい。それらは、単にドキュメントの可能ないくつかの例示であり、他の種別のドキュメントも本発明の範囲内にある。
【0065】
[0073] いくつかの例で、ドキュメント340は、ファイルタイプを有するファイルに対応する。ドキュメントとなりうるいくつかのファイルタイプは、限定はしないが、画像ファイル(例えば、.jpg、.tiff、.giff)、音楽ファイル(例えば、.mp3、.aiff、.m4a、.wav)、動画ファイル(例えば、.mov、.mp4、.m4v)、ワード処理ファイル(例えば、.doc、.docx、.pages)、プレゼンテーションファイル(例えば、.ppt、.pptx、.key)、スプレッドシートファイル(例えば、.xls、.xlsx、.numbers)、ウェブページファイル(例えば、.htm、.html)、テキストファイル(例えば、.txt)、及び、テキストを含む及び/又はテキストに関連する任意の他のタイプのファイルを含む。
【0066】
[0074] ドキュメント340は、ドキュメントの内容を記述するテキスト内容に関連付けられうる。当該関連付けられたテキスト内容は、ドキュメントについての”テキストメタデータ”として時には参照される。例えば、ドキュメント340のファイル名は、ドキュメント340についてのテキストメタデータでありうる。他の例として、デジタル画像ドキュメントのテキストメタデータは、画像のコンピュータ解析(例えば、光学文字認識(OCR)又は顔認識アルゴリズム等)によって作製されてもよい。ドキュメント340についてのテキストメタデータの他の形式は、例えば、ドキュメント340を参照する(例えば、ハイパーリンクによって)、ドキュメント340について言及する(例えば、ソーシャルネットワークへのポストにおいて)、又は、ドキュメント340を議論する(例えば、ブログポスト及び/又はユーザコメントのポストにおいて)、ウェブページから取得したドキュメント340についてのテキスト内容を含みうる。本説明の目的で、ドキュメント340についてのテキストメタデータは、ドキュメント340のテキスト内容の一部であり、かつ、ドキュメント340のテキスト内容に含まれる(現れる)ように考慮されてもよい。
【0067】
[0075] ドキュメント340はまた、現在のバージョンとみなされるものを含む複数のバージョンを有してもよい。例えば、ユーザは、ワード処理プログラムを用いてワード処理ドキュメント340の第1のバージョンを作成し保存してもよい。その後、ユーザは、ドキュメント340の第1のバージョンを修正してもよく、当該修正を含むドキュメント340の第2のバージョンを保存してもよい。代替的には、ドキュメント340はまた、現在のバージョンとみなされる時間でのただ一つのバージョンを有してもよい。
【0068】
[0076] ドキュメントインデックス328は、1以上の辞書及び登録(posting)のペアを含んでもよい。辞書のペアは、インデックストークンを格納してもよく、また、各インデックストークンについての登録のペアにおける登録リストへのポインタを含んでもよい。例えば、ポインタは、登録リストが格納される、揮発性又は不揮発性メモリの位置のアドレスであってもよい。
【0069】
[0077] インデックストークンは、ドキュメントインデックス328においてドキュメント340がインデックス化されているトークンとして定義されてもよい。インデックストークンに加えて、辞書は、例えばトークンのドキュメントでの頻度などのインデックストークンについてのトークン属性を格納してもよい。インデックストークンについてのトークン属性は、クエリ処理効率及び検索結果ランキングを改善するためにクエリプロセッサ327によって使用されてもよい。
【0070】
[0078] インデックストークンについての登録リストは、トークンが現れる1以上のドキュメント340の1以上のドキュメント識別子のリストを格納してもよく、また、例えばドキュメント340でのトークンの頻度、又はドキュメント340内のトークンの位置などの登録リストに特定されたドキュメント340についてのドキュメントトークン属性を格納してもよい。登録リストのドキュメント340についてのドキュメントトークン属性はまた、クエリ処理効率及び検索結果ランキングを改善するためにクエリプロセッサ327によって使用されてもよい。
【0071】
[0079] クエリ332を処理する際に、クエリプロセッサ327は、クエリ332のクエリトークンに基づいて、ドキュメントインデックス328の辞書内のインデックストークンを探してもよい。例えば、[solved two problems](囲い括弧なし)などのクエリ332について、クエリプロセッサ327は、辞書内のインデックストークン”solved”、”two”、及び”problems”を探してもよい。クエリプロセッサ327は、辞書内で探されたインデックストークンに関連付けられるポインタを用いて探されたインデックストークンについての登録リストを取り出してもよい。例えば、クエリプロセッサ327は、インデックストークン”solved”、”two”、及び”problems”についての辞書の登録リストに関連付けられるドキュメントインデックス328の登録から取り出してもよい(例えば、RAMへロードしてもよい)。
【0072】
[0080] クエリプロセッサ327は、クエリ332を満足するドキュメント340を特定するためにマージアルゴリズムを用いて取り出した登録リストをマージしてもよい。例えば、インデックストークン”solved”について取り出された登録リストがドキュメントD2及びD3を特定し、インデックストークン”two”について取り出された登録リストがドキュメントD2を特定し、インデックストークン”problems”について取り出された登録リストがドキュメントD2及びD3を特定することを想定する。従って、クエリプロセッサ327は、探し出したインデックストークンの全てを含むドキュメントD2を特定するために、マージアルゴリズムに従って、それら3つの登録リストをマージしてもよい。種々の異なるマージアルゴリズムは、登録リストをマージするために使用されてもよく、本発明は任意の特定のマージアルゴリズムに限定されない。例えば、マージアルゴリズムは、複数の登録リストのそれぞれを通じて複数のポインタを交互に進めることによって複数のポインティングリストを組み合わせてもよい。
【0073】
[0081] クエリプロセッサ327は、ただ単一の結合クエリ332を処理することに限定されず、クエリプロセッサ327は、より複合的なクエリ332を処理してもよい。例えば、クエリプロセッサ327は、以下で例示のタイプのクエリ332、クエリA:[(two or three )NOT problems]、クエリB:[two three problems]、クエリC:[(two three) problems]、及びクエリD[(two OR three) (problems OR solutions)]を処理してもよい。囲い括弧[]内の前述の例示のクエリ332のそれぞれにおいて、囲い括弧[]はクエリの一部ではない。クエリAはクエリ332[(two or three) AND NOT problems]と同等であり、クエリBはブールクエリ332[two AND three AND problems]と同等であり、クエリCはブールクエリ332 [(two AND three) AND problems]と同等であり、クエリDはブールクエリ332 [(two OR three) AND (problems OR solutions)]と同等である。前述の例示のクエリ332において、AND OR NOT ()はブール演算子である。
【0074】
[0082] いくつかの実施形態において、ドキュメントインデックス328は、インデックスサーバのそれぞれがドキュメントインデックス328の部分(例えば、共有部分)を格納するサービングシステム325の複数のインデックスサーバに渡って水平分割される(例えば、共有される)。種々の異なる技術が複数のインデックスサーバに渡ってインデックス328を水平分割する(共有する)ために使用されてもよい。本発明のいくつかの実施形態において、ドキュメントインデックス328は、”ドキュメンネームスペース”によって共有される。
【0075】
[0083] ドキュメントネームスペースは、共有アクセス制御の下で、1以上のドキュメント340の収集物として定義されてもよい。共有アクセス制御は、ユーザ及びユーザグループの少なくとも1つのいずれがドキュメント340へのアクセスを有するかと、ユーザ及びユーザグループの少なくとも1つがドキュメントネームスペースに属するドキュメント340上にどんなアクセス(例えば、読み出しアクセス、書込みアクセス、共有アクセス、プレビューアクセス、ダウンロードアクセスなど)を有するかと、を特定する及び/又は示す、明示的な許可及び暗黙的な許可の少なくとも1つに基づくことができる。明示的な許可は、ユーザ及びユーザグループの少なくとも1つのいずれがドキュメント340へのアクセスを有するかと、ユーザ及びユーザグループの少なくとも1つがドキュメントネームスペースのドキュメント340上にどんなアクセスを有するかと、を特定する及び/又は示す、例えばドキュメントネームスペース(又は、それらの識別子)に関連付けられる1以上のアクセス制御リスト(ACL)及び他のデータの少なくとも1つの形式で行ってもよい。暗黙的な許可の一例は、ユーザが当該ユーザのユーザアカウント(又は、それらの識別子)に関連付けられるドキュメントネームスペースの全てのドキュメント340へのアクセスを有するものである。
【0076】
[0084] 例示の実施形態において、ドキュメントネームスペースは、例えば、前述したDROPBOXコンテンツ管理サービスなどのクラウドデータストレージサービスで保持されるユーザのアカウントに関連付けられるドキュメント340を含む。アカウントに対する認証が成功すると(例えば、有効なユーザ名/パスワード)、ユーザは、ユーザのアカウントと関連付けられるドキュメントネームスペースにおいてドキュメント340へのアクセスを暗黙的に有する。
【0077】
[0085] 例示の実施形態において、ドキュメントネームスペースは、例えば前述したDROPBOXコンテンツ管理サービスなどのオンラインデータストレージサービスで保持される複数のユーザアカウントの中で共有される1以上のドキュメント340の収集物に属しているドキュメント340を含む。いくつかの例で、ドキュメントの収集物は、”共有フォルダ”と称してもよい。ドキュメントの収集物が共有されるアカウントに対する認証が成功すると、ユーザは、共有されるドキュメントネームスペースにおけるドキュメントへのアクセスを有する。
【0078】
[0086] ドキュメントインデックス328がドキュメントネームスペースによって共有される本発明のいくつかの実施形態によれば、サービングシステム325の複数のインデックスサーバのそれぞれは、1以上のドキュメントネームスペースに属しているドキュメント340にインデックスを付与する。本発明のいくつかの実施形態において、ドキュメントネームスペースの識別子は、ドキュメントネームスペース内のドキュメント340をインデックス化するインデックスサーバを決定するために、共有キーとして使用される。限定しない例示の実施形態において、ドキュメントインデックス328は、4億(400,000,000)を超えるドキュメントネームスペース内のドキュメントにインデックスを付与する。
【0079】
[0087] ドキュメント340は、ビルドシステム321によって処理することが可能に提供されるか若しくは可能にされる任意のドキュメント340、又は、ドキュメントインデックス328でインデックスが付与される任意のドキュメント340を含んでもよい。ビルドシステム321は、ドキュメント340からドキュメントインデックス328のインデックスデータベースファイル351を構築する。ビルドシステム321はまた、ドキュメント340からドキュメントインデックス328へのインデックス変形352を生成する。
【0080】
[0088] インデックスデータベースファイル351は、1以上のドキュメント340に共にインデックスを付与する辞書及び登録のペアを含んでもよい。より一般的には、インデックスデータベースファイル351内のデータは、キーが辞書のインデックストークンに対応し、かつ、その値が登録の登録リストに対応する、キーバリューペア(key-value pair)の集合(例えば、連想配列)として構成されてもよい。本発明のいくつかの実施形態において、インデックスデータベースファイル351は、1つのドキュメントネームスペースにおいてドキュメント340にインデックスを付与する。本発明のいくつかの実施形態において、ドキュメントのインデックス328のインデックスデータベースファイル351の数を低減するために、インデックスデータベースファイル351は、複数のドキュメントネームスペースにおいてドキュメント340にインデックスを付与する。インデックスデータベースファイル351によってインデックスが付与された複数のドキュメントネームスペースは、時には、ここでドキュメントネームスペースの”ドキュメントネームスペースのグループ”として参照される。
【0081】
[0089] ビルドシステム321によるドキュメントインデックス328のインデックスデータベースファイル351を構築することは、ドキュメント340をトークン化することによって複数トークンのセットを生成し、トークン格納部324に生成した複数トークンのセットを格納するトークナイザ322に関与してもよい。その後、インデクサー323は、生成した複数トークンのセットに基づいてインデックスデータベースファイル351を生成してもよい。インデクサー323は、生成したインデックスデータベースファイル351を、ドキュメントインデックス328の一部として、サービングシステム325のインデックスサーバへの格納のために、サービングシステム325へ提供する。
【0082】
[0090] ビルドシステム321によってドキュメント340からドキュメントインデックス328へのインデックス変形352を生成することは、最近作成された又は最近修正されたドキュメント340からの複数トークンのセットを生成した後に、インデクサー323に通知するトークナイザ322に関与してもよい。例えば、ドキュメント340は、エンドユーザコンピューティングデバイス311のユーザによって最近作成された又は最近修正されたものであってもよい。最近作成したドキュメント340の通知、或いは、修正したドキュメント340の通知が行われると、インデクサー323は、トークン格納部324に当該ドキュメントについて格納された1以上の複数トークンのセットに基づいて、ドキュメントについてのインデックス変形352を生成する。例えば、ドキュメントが修正される場合などのいくつかの例において、生成したインデックス変形352は、修正したドキュメントについて生成した複数トークンのセットと、以前のバージョンのドキュメントについて生成した複数トークンのセットとの間の差異を反映する。生成したインデックス変形352は、その後ドキュメントインデックス328にそれを適用するサービングシステム325へ提供されてもよい。
【0083】
[0091] トークナイザ322は、ドキュメント340のテキスト内容をトークン化することによって複数トークンのセットを作製する。ドキュメントのテキスト内容をトークン化することは、ドキュメントの文字列を取得することを含んでもよい。種々の技術がドキュメントデータの形式に従って、ドキュメントの文字列を取得するトークナイザ322によって使用されてもよい。例えば、技術又は使用される当該技術は、ドキュメントの文字符号化手法(例えば、ASCII、Unicode、UTF-8、マイクロソフトWORD、ADOBE、PDFなど)に従ってドキュメントを復号することと、ドキュメントが圧縮されているかどうか(例えば、ZIP圧縮によって)に従ってドキュメントを解凍することとの少なくとも1つを含んでもよい。
【0084】
[0092] ドキュメントの文字列が取得されるとすぐに、トークナイザ322は、同時にトークン上で言語プロセスを実行することが可能なように、文字列を、複数の小片、いわゆるトークンに分割する。言語プロセスは、例えば、所定の文字列(例えば、句読点)を無視することと、共通の単語(例えば、ストップワード)を除外することと、並びに、語幹解釈及び見出語解釈を行うこととの少なくとも1つを含んでもよい。言語プロセスはまた、付加記号、アクセント及び大文字化/大文字変換の少なくとも1つなどを取り除くことを含むトークンの正規化を含んでもよい。
【0085】
[0093] トークナイザ322がドキュメントについての複数トークンのセットを生成した後に、トークナイザ322は、トークン格納部324に複数トークンのセットを格納する。例えばトークナイザ322がインデクサー323へ最近作成したドキュメント340を通知するか、或いは、インデクサー323へ最近修正されたドキュメント340を通知する場合などのいくつかの例において、トークナイザ322はまた、複数トークンのセットをインデクサー323へ提供してもよい。
【0086】
[0094] トークン格納部324は、トークナイザ322によって複数のドキュメント340について生成された複数トークンのセットを格納する。例えば、所定バージョンのドキュメント340に関して、トークン格納部324は、当該ドキュメントバージョンについてトークナイザ322によって生成された複数トークンのセットを格納してもよい。
【0087】
[0095] 本発明のいくつかの実施形態において、トークン格納部324は、例えば、APACHE HBASEデータベースシステムなどのカラム指向型の分散データベースシステムを含む。しかしながら、データベースシステムの他のタイプが、それぞれにおける特定の実装の要件に従って、他の実施形態に使用されてもよい。例えば、独自の、関係型、又は、独立型のデータベースシステムが、オープンソース、カラム指向型又は分散型のものの代わりに使用されてもよい。
【0088】
[0096] 上記例示のクライアントサーバのマルチユーザ検索システム320を考慮すると、サービングシステム325及びクエリ332を処理し、個別の回答334をそれらへ返すために使用されるそれらのコンポーネントについて以下で詳細に説明する。
【0089】
<サービングシステムの構成要素>
[0097] 次に、
図4を参照して、本発明のいくつかの実施形態に従う、サービングシステム325のより詳細を示すブロック図について説明する。サービングシステム325は1つ以上のサーバ326(以下、まとめて”フロントエンドサーバ326”として参照する)と、1つ以上のサーバ410(以下、まとめて”アクセス制御サーバ410”として参照する)と、クエリプロセッサ327とを含む。
【0090】
[0098] クエリプロセッサ327は、(1)ドキュメントインデックス328の格納と、ドキュメントインデックス328のインデックスシャード(index shard)(例えば328A、328B、328C...328N)に対するクエリ332の処理とに対して責任をもつ1つ以上のサーバ430(まとめて”インデックスサーバ430”として参照される)と、(2)クエリ332と関連付けられたドキュメントネームスペース識別子に基づいて、フロントエンドサーバ326から適切なインデックスサーバ430へのクエリ332のルーティングと、インデックスサーバ430から返答される回答418を、その後フロントエンドサーバ326に、そして最後にエンドユーザコンピューティングデバイス311に返答される回答334に統合すること、に対する責任をもつ1つ以上のサーバ430(まとめて”ルーティングサーバ420”として参照される)、との2つのレベルのサーバにわたって分散される。
【0091】
[0099] ドキュメントインデックス328の各インデックスシャード(例えば、328A、328B、328C...328N)は、対応するインデックスサーバ(例えば、430A、430B、430C...430N)において格納されうる。インデックスサーバ(430B)におけるインデックスシャード(例えば328B)は、当該インデックスシャードに割り当てられた1つ以上のドキュメントネームスペース内の、インデックスドキュメント340でありうる。
【0092】
[0100] 動作において、フロントエンドサーバ326Aは、エンドユーザコンピューティングデバイス(例えば311A)から検索クエリ332Aを受信して、個別化された回答334Aをエンドユーザコンピューティングデバイスに返答する。回答334Aは、クエリ332Aに関連するものとして回答334で特定されたドキュメント340が、ユーザがアクセスを認証されたドキュメントネームスペースに属すドキュメント340にのみ限定されうるという意味において個別化されうる。クエリ332Aがコンプリーションクエリ(completion query)である場合、回答334Aはまた、回答334に含まれるコンプリーションクエリにあり得るコンプリーション要素が、ユーザがアクセスを認証されたドキュメントネームスペースに属すインデックスドキュメント340のドキュメントインデックス328におけるインデックストークンのみから構成されうるという意味において個別化されうる。ユーザは、認証されて、回答334Aの個別化を促進しうる。
【0093】
[0101] 例えば、クエリ332Aは、認証されたユーザに対して確立された認証セッションのコンテキストにおいて、フロントエンドサーチ326Aで受信されうる。例えば、認証されたユーザは、クエリ332Aをフロントエンドサーバ326Aに送信するエンドユーザコンピューティングデバイスのユーザでありうる。認証されたユーザは、フロントエンドサーバ326Aがクエリ332Aを受信する前に認証されうる。例えば、認証されたユーザは、認証クレデンシャル(例えばユーザ名/パスワードのペア)を含んだ、エンドユーザコンピューティングデバイスからの認証ネットワーク要求を受信したことに応答して認証されうる。認証ネットワーク要求を受信したことに応じて、当該ネットワーク要求内のパスワードが当該ユーザ名に対する既知のパスワードと比較されうる。パスワードが一致した場合には認証セッションが確立する。そうではなくパスワードが一致しない場合、認証セッションは確立しない。
【0094】
[0102] ユーザ名/パスワードのペア以外の認証クレデンシャルがユーザを認証するために用いられうる。例えば、ある例では、ユーザはマルチファクタ(multi-factor)認証技術に従って認証されうる。例えば、ユーザの知っている何か(例えばユーザ名/パスワード)に加えて、ユーザはユーザの所有する何か(例えばFOB又は携帯電話機)及びユーザ自身である何か(生体測定値)の少なくともいずれかに基づきうる。ある例では、ユーザがパスワードを提供しない認証プロトコルに従って認証されうる。この目的に適した認証プロトコルのいくつかの例は、オーオース(Open Authorization)(OAuth)、オープンId(OpenId)及びセキュリティアサーションマークアップ言語(Security Assertion Markup Language)(SAML)認証プロトコルを含む。
【0095】
[0103] いくつかの例では、ユーザはフロントエンドサーバ326Aがクエリ332Aを受信する前に認証されるのに対し、他の実施形態では、ユーザはクエリ332Aを受信することに応じて認証される。例えば、クエリ332Aを含むネットワーク要求はまた、ユーザを認証する認証クレデンシャルを含み得、又は、ユーザは、他の方法でクエリ332Aを含むネットワーク要求を受信したことに応じて認証されうる。
【0096】
[0104] ユーザが認証された後で、認証セッションは、セッション識別トークンの形式でユーザのために確立されうる。特に、当該セッション識別トークンは、成功裏にユーザを認証したことに応じて生成されうる。生成後には、セッション識別トークンは、ユーザのエンドユーザコンピューティングデバイスとフロントエンドサーバ326Aとの間で、クエリ332Aを含んだネットワーク要求と回答334Aを含むネットワーク応答を含む、ネットワーク要求及びネットワーク応答において(例えば”クッキー”で)送信されうる。セッション識別トークンは、直接的又は間接的(例えば連想配列を介して)に、ユーザが成功裏に認証したユーザアカウント(例えばユーザ名によってユニークに識別されるアカウント)を識別する。セッション識別トークンは、更なるセキュリティのために暗号によって暗号化され得る。
【0097】
[0105] 時々(例えば、クエリ332Aを受信することに応じて)又はある期間にわたって(例えばユーザが認証された時間からユーザのエンドユーザコンピューティングデバイスに回答334Aが戻るまで)、認証セッションデータ411は、フロントエンドサーバ326Aの揮発性又は不揮発性メモリに格納されうる。認証セッションデータ411は、認証されたユーザのユーザ名、ユーザ識別子又は他のユーザアカウント識別子と、関連付けられた特権、許可及び権限の少なくともいずれかと、のような認証されたユーザと関連する情報を含み得る。
【0098】
[0106] サービングシステム325は、クエリ332Aを満たし、且つ、ユーザのアクセスが認証されたドキュメントネームスペースに属すドキュメントインデックス328にインデックス化されたドキュメント340のみを識別するために、クエリ332Aへの回答334Aを制限することができる。サービングシステム325は、ドキュメントインデックス328が、クエリ332Aを満たすが、ユーザのアクセスが認証されていないドキュメントネームスペースに属すインデックスドキュメント340をインデックス化しうるものの、この制限を行うことができる。
【0099】
[0107] クエリ332Aに対する回答334Aを制限するために、フロントエンドサーバ326Aは、ネットワーク要求412を送信してアクセス制御サーバ410Aにアクセスし、認証されたユーザによるアクセスが許容されるドキュメントネームスペースの識別子を要求する。アクセス制御サーバ410Aによる決定を容易にするため、ネットワーク要求412は、認証されたユーザの表示又は識別子を含みうる。例えば、識別又は識別子は、ユーザ名、セッション識別子トークン、ユーザアカウント識別子、又は、ユーザ及び/又はユーザが成功裏に認証されたユーザアカウントをユニークに識別する他の情報であってよい。
【0100】
[0108] ネットワーク要求412を受信したことに応じて、アクセス制御サーバ410Aは、認証されたユーザがアクセスすることが許可されたドキュメントネームスペースのユーザアカウントデータベースの識別子(
図4では不図示)をルックアップすることができ、このルックアップは、要求412で提供された、認証されたユーザの識別又は識別子をルックアップ動作のキーとして用いてなされる。
【0101】
[0109] フロントエンドサーバ326Aは、様々な異なる時間帯において、アクセス制御サーバ410Aにネットワーク要求412を送信し得、例えば、フロントエンドサーバ426Aは、クエリ332Aを受信したことに応じて、ネットワーク要求412を送信しうる。他の例として、フロントエンドサーバ426Aは、成功裏にユーザを認証した後にネットワーク要求412を送信しうる。
【0102】
[0110] ネットワーク要求412を受信したことに応じて、アクセス制御サーバ410Aは、認証されたユーザがアクセスを許可された、認証されたドキュメントネームスペースの識別子を含むネットワーク応答413を返す。認証された各ドキュメントネームスペースは、認証されたユーザが、ドキュメントネームスペースの明示的及び/又は暗黙的なアクセス制御に従ういくつかのアクセスレベルでアクセスを許可された認証されたドキュメントネームスペースを、ユニークに識別する。例えば、認証されたドキュメントネームスペースの識別子は、認証されたユーザが、ドキュメントネームスペースに属すドキュメント340への、少なくとも読み取りアクセス権を有するドキュメントネームスペースを識別しうる。続くネットワーク要求に対する処理の効率化のため、フロントエンドサーバ326Aは、認証されたユーザのために維持される認証セッションデータ411の一部として、認証されたドキュメントネームスペースの識別子を格納(キャッシュ)しうる。この場合、フロントエンドサーバ326Aは、クエリ332Aを受信したことに応じて、ネットワーク要求412をアクセス制御サーバ410Aに送信する必要がない。
【0103】
[0111] ユーザのエンドユーザコンピューティングデバイスからのクエリ332Aを含むネットワーク要求はまた、ユーザが検索することを望むドキュメントネームスペースの識別子を特定しうる。この場合、ユーザが検索することを望むドキュメントのネームスペースの識別子のセットと、ユーザのアクセスが許可された認証されたドキュメントネームスペースの識別子のセットとの共通部分が計算されて、検索のための認証されたドキュメントネームスペースの識別子のセットが決定されうる。この共通部分は、フロントエンドサーバ326Aによって実行されうる。或いは、この共通部分は、アクセス制御サーバ410Aによって実行されうる。この場合、フロントエンドサーバ326Aは、ネットワーク要求412内に、ユーザが検索することを望むドキュメントのネームスペースの識別子を含み、ネットワーク応答413は、アクセス制御サーバ410Aによって計算されるような共通部分の結果を含みうる。
【0104】
[0112] クエリ332Aを含むネットワーク要求が、特定の要求された検索すべきドキュメントネームスペースでない場合、認証された検索すべきドキュメントネームスペースの識別子のデフォルトのセットが選択されうる。このデフォルトのセットの選択は、応答413で戻る認証されたドキュメントネームスペースの識別子から、又は、場合によっては認証セッションデータ11の一部としてのキャッシュから、フロントエンドサーバ326Aによって実行されうる。或いは、アクセス制御サーバ410Aは、ユーザがアクセスを許可された、全ドキュメントネームスペースのセットからデフォルトのセットを選択しうる。いずれの場合も、デフォルトのセットは、a)ユーザがアクセスを許可された、全ドキュメントネームスペース(例えば、認証されたユーザのアカウントに関連付けられた全ドキュメントネームスペース)、又は、b)それらのサブセットを特定することができる。
【0105】
[0113] 検索のための認証されたドキュメントネームスペースの識別子が決定された後、クエリ332Aと検索のための認証されたドキュメントネームスペースの識別子とを含むネットワーク要求が、クエリプロセッサ327による更なるクエリ332Aの処理のために、フロントエンドサーバ326Aからルーティングサーバ420Aに送信されうる。
【0106】
[0114] クエリ332Aと検索のための認証されたドキュメントネームスペースの識別子とを含む、フロントエンドサーバ326Aからのネットワーク要求を受信したことに応じて、ルーティングサーバ420Aにおけるクエリプロセッサ327は、クエリ332Aをルーティングする1つ以上のサーバ430を決定する。この決定は、ルーティングサーバ420Aが、検索のための認証されたドキュメントネームスペースの識別子の各々に対して決定論マッピング機能(deterministic mapping function)416を適用した結果に基づいてなされうる。決定論マッピング機能416と、ドキュメントネームスペースの識別子が与えられたインデックスサーバマッピング417とはルーティングサーバ(例えば420A)によって用いられて、所定のドキュメントネームスペースのドキュメントをインデックス化するインデックスシャード(例えば328B)を格納するインデックスサーバ(例えば430B)が決定される。
【0107】
[0115] 本発明のいくつかの実施形態に従って、決定論マッピング機能416は、ドキュメントネームスペースを割り当てるインデックスシャード(例えば328B)を決定するために、一方向ハッシュ関数、単純なハッシュ関数、コンシステントハッシュ(consistent hash)関数等を検索するドキュメントネームスペースの識別子に適用する。この決定を実行するため、ルーティングサーバ420Aのクエリプロセッサ327は、インデックスサーバマッピング417へのアクセスを有しうる。同時に、決定論マッピング機能416とインデックスサーバマッピング417とは、ルーティングサーバ420Aのクエリプロセッサ327の方法を提供して、所定のドキュメントネームスペースのためのインデックスを含むインデックスシャード(例えば328B)を可能するインデックスサーバ(例えば430B)のホスト名又はネットワークアドレスを決定する。
【0108】
[0116] 本発明のいくつかの実施形態では、決定論マッピング機能416は、ハッシュ機構(hash mechanism)とモジュロ機構(modulo mechanism)とを含む。ハッシュ機構は、入力としてドキュメントネームスペースの識別子(例えばドキュメントネームスペースの識別子を表す文字列データ)を受け付け、出力としてハッシュ値hvを生成しうる。例えば、ハッシュ機構は、MD4、MD5、SHA−1又はSHA2メッセージダイジェストアルゴリズムを含み得、メッセージダイジェストアルゴリズムは、入力として提供されたドキュメントネームスペースの識別子に適用したときに、出力としてハッシュ値(例えば32ビットのハッシュ値)を生成する。モジュロ機構は、係数kによってハッシュ値hvを除算した余りrを計算し、これにより、入力のドキュメントネームスペースの識別子を、0からk−1の範囲内でkの1つにマッピングする。係数kは、例えば、実際の、期待される又は望ましいインデックスサーバ430の数、ドキュメントインデックス328によってインデックス化された、実際の、期待される又は望ましいドキュメントネームスペースの数、及び、実際の、期待される又は望ましいドキュメントネームスペースのグループの数の少なくともいずれかを含む、様々な異なる要素に基づいて選択され得る。1つの例示的な実施形態では、値kは2のべき乗であり少なくとも1024と等しい。
【0109】
[0117] 本発明のいくつかの実施形態では、インデックスサーバマッピング417は、インデックスサーバ430のそれぞれに対するエントリを含む。このようなエントリのそれぞれは、0からk−1の範囲の1つ以上の重複していないサブレンジ(sub-range)によってキーが付与(keyed)される。例えば、マッピング417内の第1エントリE1は、0からk−1の範囲内における連続値の第1の範囲を定義するK1とK2の値を含むキーを有し得、マッピング417内の第2エントリE2は、0からk−1の範囲内における連続値の第2の範囲を定義するK3とK4の値を含むキーを含み得、ここで第1の範囲のK1からK2は第2の範囲のK3からK4とは重複しない。
【0110】
[0118] ルーティングサーバ420Aにおけるクエリプロセッサ327が所定のドキュメントネームスペースの識別子に決定論マッピング機能416を適用する場合、0からk−1の範囲内の値rが生成されうる。ルーティングサーバ420Aにおけるクエリプロセッサ327は、インデックスサーバマッピング417と値rを情報交換して、値rがエントリキーの範囲内であるエントリを識別する。このエントリのホスト名又はネットワークアドレスは、所定のドキュメントネームスペースに属すドキュメント340をインデックス化するインデックスシャード(例えば328B)が格納されるインデックスサーバ(例えば430B)を識別しうる。
【0111】
[0119] 本発明のいくつかの実施形態では、インデックスシャード(例えば328B)に割り当てられるドキュメントネームスペースは、インデックスシャードが格納されるインデックスサーバ(例えば430B)に格納されるインデックスファイルの数を低減するために、インデックスシャードのより少ない数のドキュメントネームスペースのグループにグループ分けされる。すなわち、インデックスシャード(例えば328B)内で、インデックスシャードに割り当てられたるドキュメントネームスペースはドキュメントネームスペースのグループに分割されうる。そのようなドキュメントネームスペースのグループのそれぞれは、複数のドキュメントネームスペースを含みうる。
【0112】
[0120] 例えば、インデックスシャード(例えば328B)に割り当てられる2百万(2,000,000)のドキュメントネームスペースのそれぞれは、インデックスシャードの80のドキュメントネームスペースのグループの1つに分割されうる。効率化のため、インデックスシャード(例えば328B)が格納されるインデックスサーバ(例えば430B)は、80のドキュメントネームスペースのグループのそれぞれに対する、1つ以上のインデックスファイルを、2百万(2,000,000)のドキュメントネームスペースのそれぞれに対する、1つ以上のインデックスファイルの代わりに格納しうる。この場合、ドキュメントネームスペースの識別子に適用される場合にハッシュ機構によって出力されるハッシュ値hvは、所定のドキュメントネームスペースが属すドキュメントネームスペースのグループの識別子として用いられうる。
【0113】
[0121] いくつかの実施形態では、ドキュメントネームスペースのグループはインデックスシャード(例えば328B)を更に分割するためには用いられない。このような実施形態では、係数kによってハッシュ値hvを除算した余りrが、所定のドキュメントネームスペースが割り当てられるドキュメントネームスペースのグループの識別子として用いられうる。これらの実施形態ではまた、インデックスシャードが格納されるインデックスサーバは、インデックスシャードが割り当てられる全てのドキュメントネームスペースに対する1つ以上のインデックスファイルを格納しうる。例えば、インデックスサーバは、インデックスシャードが割り当てられる全てのドキュメントネームスペースに対する単一のインデックスファイルを格納しうる。
【0114】
[0122]
図4では、インデックスサーバマッピング417が決定論マッピング機能416及びルーティングサーバ420Aにおけるクエリプロセッサ327とは別に図示されているが、インデックスサーバマッピング417は、決定論マッピング機能416の構成要素、又はルーティングサーバ420Aにおけるクエリプロセッサ327の構成要素であってもよい。更に、各ルーティングサーバ420Aは、インデックスサーバマッピング417へのアクセスを有しうる。この場合、効率的なアクセスのために、インデックスサーバマッピング417のコピーがルーティングサーバ420のそれぞれにおいて格納(キャッシュ)されうる。追加的に又は代替的に、インデックスサーバマッピング417は、ネットワークサービスとしてルーティングサーバに対して利用可能であってもよい。サービングシステム325は、負荷分散、容量の増加、スループットの増加、レイテンシの低減、フェイルオーバ、及び冗長性の少なくともいずれかのために、水平方向にスケールされる複数のルーティングサーバ420を含みうる。
【0115】
[0123] 例示的な実施形態では、ドキュメントインデックス328は、4億(400,000,000)を超えるドキュメントネームスペースのドキュメント340をインデックス化し、決定論マッピング機能416とインデックスサーバマッピング417とは、4億(400,000,000)を超えるドキュメントネームスペースのそれぞれを、およそ2百(200)のインデックスシャード(例えば328A、328B、328C...328N)の1つに割り当てる(マッピングする)。この例示的な実施形態では、各インデックスシャード(例えば328A)は、およそ2百万(2,000,000)のドキュメントネームスペースにおけるドキュメント340をインデックス化する。
【0116】
[0124] いくつかの例では、インデックスサーバ(例えば430C)は、実際には水平方向に分散された複数のサーバを含み、インデックスシャード(例えば328C)に対する負荷分散、フェイルオーバ、冗長性を提供する。この場合、複数のインデックスサーバのそれぞれは、インデックスシャード(例えば328C)の複製(replica)又はコピーを格納しうる。
【0117】
[0125] いくつかの例では、インデックスサーバ(例えば430A)は、インデックスシャード(例えば328A)の一部を格納する、複数のサーバを含む。この場合、複数のレベルのルーティングサーバが存在しうる。第1のルーティングレベルは、フロントエンドサーバ326Aから受信したクエリ332Aを、1つ以上のインデックスサーバ430にルーティングするルーティングサーバ420Aによって例示される。この例では、ルーティングサーバの第2のレベルは、インデックスサーバ(例えば430C)内でクエリをインデックスサーバの複数のサーバの1つ以上に更にルーティングするために存在しうる。この場合、第2のレベルのルーティングサーバはまた、決定論マッピング機能と、ドキュメントネームスペースの識別子に基づいてクエリをルーティングするための決定論マッピング機能416とインデックスサーバマッピング417のようなマッピングとを有し得る。
【0118】
[0126]
図4の例では、クエリ332Aは、ルーティングサーバ420Aにより、決定論マッピング機能416とインデックスサーバマッピング417に従ってインデックスサーバ430Bと430Cとにルーティングされる。しかし、クエリ332Aは、クエリ332Aを用いて検索する認証されたドキュメントネームスペースの数に応じて、容易に単なる1つのインデックスサーバ430にルーティングされるか、2つ以上のインデックスサーバ430にルーティングされるかする。例えば、検索する1つの認証されたドキュメントネームスペースのみが存在する場合、又は、検索する全ての認証されたドキュメントネームスペースが1つのインデックスシャード(例えば328B)に割り当てられている場合、そのときは、クエリ332Aは、ルーティングサーバ420Aにより、単なる1つのインデックスサーバ(例えば430B)にルーティングされうる。
【0119】
[0127] クエリ332Aをインデックスサーバ(例えば430B)にルーティングする場合、ルーティングサーバ420Aは、インデックスサーバへクエリ332Aを含むネットワーク要求を送信しうる。加えて、ネットワーク要求は、インデックスサーバに格納されたインデックスシャード(例えば328B)に割り当てられる、検索する識別されたドキュメントネームスペースの識別子を含みうる。加えて、そのような認証されたドキュメントネームスペースの識別子のそれぞれは、ネットワーク要求内で、ドキュメントネームスペースが属すドキュメントネームスペースのグループの識別子と関連付けられ得る。
【0120】
[0128] 本発明のある実施形態では、インデックスサーバ(例えば430B)のクエリプロセッサ327は、ルーティングサーバ420Aから受信したネットワーク要求内の、ドキュメントネームスペースのグループの識別子を用いる。例えば、インデックスサーバのクエリプロセッサ327は、ネットワーク要求内のドキュメントネームスペースのグループの識別子に基づいて、インデックスサーバの不揮発性メモリに格納される所定のインデックスデータベースにのみ、又はインデックスサーバの不揮発性メモリに格納された所定のデータ構造にのみアクセスしうる。
【0121】
[0129] 例として、対応するドキュメントネームスペースの識別子”abcd”及び”defg”を用いて2つの認証されたドキュメントネームスペースが検索されるべきであることを特定したクエリ332Aを含むネットワーク要求が、フロントエンドサーバ326Aからルーティングサーバ420Aに送信されることを想定する。更に、決定論マッピング機能416とインデックスサーバマッピング417に従って、認証されたドキュメントネームスペース”abcd”がドキュメントネームスペースのグループ”1234”に属し、かつインデックスシャード328Bに割り当てられるとともに、認証されたドキュメントネームスペース”defg”がドキュメントネームスペースのグループ”5678”に属し、かつインデックスシャード328Cに割り当てられることを想定する。この場合、ルーティングサーバ420Aからインデックスサーバ430Bへのネットワーク要求が、ドキュメントネームスペースのグループ”1234”におけるドキュメントネームスペース”abcd”が検索されるべきであることを特定し、ルーティングサーバ420Aからインデックスサーバ430Cへのネットワーク要求が、ドキュメントネームスペースのグループ”5678”におけるドキュメントネームスペース”defg”が検索されるべきであることを特定する。インデックスサーバ430Bは、クエリ332Aに対する回答418Aを形成する場合に、インデックスサーバ430Bへ送信されたネットワーク要求内の、ドキュメントネームスペースのグループの識別子”1234”を用いて、インデックスサーバ430Bのクエリプロセッサ327によってアクセスされるインデックスシャード328Bの部分を限定する。同様に、インデックスサーバ430Cは、クエリ332Aに対する回答418Bを形成する場合に、インデックスサーバ430Cへ送信されたネットワーク要求内の、ドキュメントネームスペースのグループの識別子”5678”を用いて、インデックスサーバ430Cのクエリプロセッサ327によってアクセスされるインデックスシャード328Cの部分を限定する。このような限定は、例えば、インデックスサーバの不揮発性メモリに格納されるインデックスデータベースファイル351、及び/又は、特定されたドキュメントネームスペースのグループの識別子に関連付けられたインデックスサーバの不揮発性のメモリ内のデータにのみアクセスすることを含みうる。
【0122】
[0130] ルーティングサーバ420Aは、インデックスサーバ430のそれぞれのクエリプロセッサ327が並行してクエリを処理することができるように、クエリ332Aを複数のインデックスサーバ(例えば430B、430C)にルーティングしうる。例えば、ルーティングサーバ420Aは、クエリ332Aを含むネットワーク要求を、ルーティングサーバ420Aが、クエリ332Aを含むインデックスサーバ430Cへのネットワーク要求を送信するのと同時又はほぼ同時に、インデックスサーバ430に送信しうる。この場合、インデックスサーバ430Bのクエリプロセッサ327は、インデックスシャード328Bに対するクエリ332Aを、インデックスサーバ430Bのクエリプロセッサ327がインデックスシャード328Cに対するクエリ332Aを処理するのと同時又はほぼ同時に、処理しうる。
【0123】
[0131] インデックスサーバ430(例えば430B)においてクエリ332Aが受信された場合、インデックスサーバのクエリプロセッサ327はインデックスサーバに格納されたインデックスシャード(328B)を情報交換して(にアクセスして)、クエリを満たすドキュメント340を決定する。このようにするために、インデックスサーバのクエリプロセッサ327は、クエリに対する回答(例えば418A)においておそらく識別可能なドキュメント340を、検索されるべき認証されたドキュメントネームスペースに属すドキュメント340のみに制限しうる。この制限を行うために、インデックスサーバのクエリプロセッサ327は、ルーティングサーバ420Aからのネットワーク要求において識別子クエリ332Aに付随する、認証されたドキュメントネームスペースを用いうる。加えて、インデックスシャードにインデックス化されたドキュメント340のドキュメント識別子は、インデックス化されたドキュメント340が属すドキュメントネームスペースの、ドキュメントネームスペースの識別子と関連付けられうる。これらの関連は、クエリプロセッサ327がドキュメント340を制限することを容易にする。ここで、当該ドキュメントは、1)クエリ332Aを満たすドキュメント、及び、2)検索されるべき認証されたドキュメントネームスペースの識別子の1つである、ドキュメントネームスペースの識別子に関連付けられたドキュメントに対するクエリへの回答の中で識別されることができる。インデックス化されたドキュメント340が別のやり方でクエリを満たしたとしても、ドキュメント340が検索する認証されたドキュメントネームスペースの1つに属さない場合には、インデックスサーバのクエリプロセッサ327は、クエリ332への回答418Aにおいてドキュメント340を特定しないようにしてもよい。
【0124】
[0132] ルーティングサーバ(例えば420A)に戻るインデックスサーバ(例えば430B)からの回答(例えば418A)は、クエリ332Aを満たす認証されたドキュメントネームスペースの1つ以上でドキュメント340を識別しうる。ドキュメントは、インデックスサーバのクエリプロセッサ327によって採用されるランキング機能に従ってランク付けされうる。このランキング機能は、インデックス化されたドキュメントに対して計算された、クエリ依存型メトリクス及びクエリ非依存型メトリクスの少なくともいずれかに基づきうる。
【0125】
[0133] クエリ332Aに対するインデックスサーバ(例えば430B)からの回答(例えば418A)は、ランキング機能によって生成された、識別されたドキュメントのそれぞれに対するランキングスコアを含みうる。クエリプロセッサ327は、異なるインデックスサーバで生成された、同一のクエリに対するランキングスコアが互換性を有するように、インデックスサーバ(例えば、430A、430B、430C、...430N)と全く同一のランキング機能を採用しうる。インデックスサーバと全く同一のランキング機能を用いることは、ルーティングサーバ420Aにおけるクエリプロセッサ327が、インデックスサーバ430B及び430Cから戻る、クエリ332Aに対する複数の回答418A及び418Bで識別されたドキュメント340を、フロントエンドサーバ326Aへ戻る、そして最終的には、フロントエンドサーバ326Aがクエリ332Aを受信したエンドユーザコンピューティングデバイス311Aに戻る、単一の回答334Aに統合できるようにする。
【0126】
[0134] 本発明のいくつかの実施形態に従って、フロントエンドサーバ326Aは、従来型のスペリング修正アルゴリズム及び従来型の発音修正アルゴリズム(例えばsoundexアルゴリズム)の少なくともいずれかを、得られた検索クエリ332Aに適用しうる。スペリング修正アルゴリズムはスペリング修正の異なる形式を適用することができる。例えば、スペリング修正アルゴリズムは、従来型の分離語の修正アルゴリズム(isolated-term correction algorithm)(例えば、距離編集及び/又はk-gram重複)及び/又は従来型のコンテキスト依存型の修正アルゴリズムを適用することができる。従って、ルーティングサーバ420Aに転送され、インデックスサーバ430にルーティングされたクエリ332Aは、フロントエンドサーバ326Aによってクエリ332Aのトークンに対して実行されるスペリング修正及び/又は発音修正の結果を反映しうる。
【0127】
<インデックスシャード>
[0135] 次に、
図5を参照して、本発明のいくつかの実施形態に従う、ドキュメントインデックス328のインデックスシャード(例えば328B)のブロック図について説明する。本発明のいくつかの実施形態では、インデックスシャードは、辞書510と、対応する登録520とを含む逆インデックスのように構築されうる。
【0128】
[0136] 辞書510は、登録520内で識別されるドキュメント340がインデックス化される、インデックストークン(例えばトークン1、トークン2、トークン3、...トークンN、)を含みうる。辞書510もまた、各インデックストークン(例えばトークン1)に対して、1つ以上のドキュメントの識別子(例えばDOC ID1)の登録リスト(例えば登録リスト2)へのポインタを含み得、当該1つ以上のドキュメントの識別子は、インデックストークンがインデックス化された(現われる)ドキュメント340を識別する。
【0129】
[0137] 辞書510はまた、例えばトークン頻度情報、又は、クエリに依存した方法及び/又はクエリに非依存の方法で検索クエリへのドキュメントの関連をランク付け又は他の方法で決定するクエリプロセッサ327のランキング機能で用いられうる他の情報などの、例えばトークン属性情報などのインデックストークン以外の情報を含みうる。
【0130】
[0138] 登録520の登録リスト(例えば、登録リスト2)は、ドキュメント識別子以外の情報、例えば、ドキュメントトークンの属性情報、例えば、特定のドキュメント340内のトークンのトークン頻度、特定のドキュメント340内のトークンの1つの位置又は複数の位置などの情報、又は、クエリに依存した方法及び/又はクエリに非依存の方法でクエリへのドキュメント340の関連をランク付けする又は他の方法で決定するクエリプロセッサ327のランキングアルゴリズムによって使用されうる他の情報を含みうる。
【0131】
[0139] 登録520内のドキュメント識別子(例えばDOC ID1、DOC ID2、DOC ID3...DOC ID N)は、識別されるドキュメント340が属すドキュメントネームスペースを示すドキュメントネームスペースの識別子と関連付けられうる。この関連はまた、インデックスサーバ(例えば430B)のクエリプロセッサ327が、クエリ(例えば332)に対する回答(例えば417A)を制限して、検索されるべき認証されたドキュメントネームスペースに属すドキュメント340のみを識別できるようにする。
【0132】
[0140] 例えば、登録リスト(登録リスト2)の要素は、ドキュメント340が属すドキュメントネームスペースを識別するドキュメントネームスペースの識別子を用いてプリフィックスされ(prefixed)得る。例えば、登録リスト(例えば登録リスト2)は、<ドキュメントネームスペースの識別子>:<ドキュメント識別子>の形式の文字列データであり得、ここで<ドキュメントネームスペースの識別子>は、ドキュメントネームスペースを識別する文字列データフィールド、<ドキュメント識別子>はドキュメントネームスペースに属すドキュメント340を識別する文字列データフィールドである。コロン”:”文字は、セパレータ文字として用いられて、登録リスト要素内の文字列データフィールドを分割する。他のセパレータ文字も使用可能である。セパレータ文字を用いないことも可能であり、例えば、文字列データフィールドを固定長にすることもできる。ドキュメント識別子のための他の形式も使用可能であり、本発明は特定のプレフィックス形式を何ら限定しない。
【0133】
[0141] ドキュメント340と属すドキュメントネームスペースとを関連付けるドキュメントネームスペースの識別子を用いて、登録リストのドキュメント識別子をプレフィックスする代わりに、インデックスシャードは、多対1マッピングを有し得る。この多対1マッピングは、所定のドキュメント識別子を、ドキュメント340が属すドキュメントネームスペースの識別子にマップする。このマッピングは、ドキュメントネームスペースは複数のドキュメント340を含みうるため、多対1である。
【0134】
[0142] 本発明のいくつかの実施形態では、スペースの効率化及び登録520のサイズ低減のため、登録リストのドキュメントネームスペースの識別子又はドキュメント識別子(例えば登録リスト2)は、ローカル識別子を含み、このローカル識別子は、インデックスシャード(インデックスシャード328B)に対して局所的であり、かつ、(バイト数に関して)サイズがより大きい、グローバルのドキュメントネームスペースの識別子又はグローバルのドキュメント識別子の代用となる。このローカル識別子は、当該ローカル識別子が代用となる、グローバルのドキュメントネームスペースの識別子或いはグローバルのドキュメント識別子よりも(バイト数に関して)サイズが小さくなり得る。
【0135】
[0143] インデックスシャード(例えば328B)は、所定のローカル識別子をグローバルのドキュメント識別子にマップする1対1マッピングを含みうる。或いは、2つの1対1のマッピングを有し得る。マッピングの1つは、ローカルのドキュメントネームスペースの識別子からグローバルのドキュメントネームスペースの識別子へ変換し、他のマッピングは、ローカルのドキュメント識別子をグローバルのドキュメント識別子に変換する。更に他の代替として、所定のローカルドキュメントネームスペースからグローバルの識別子とドキュメント340の属すドキュメントネームスペースのグローバルドキュメントネームスペースの識別子に変換する1対1マッピングを有し得る。
【0136】
[0144] 本説明において、明示的な説明がない限り、ドキュメント340の”ドキュメント識別子”は、ドキュメント識別子の全ての取り得る形式を参照し得、当該ドキュメント識別子は、ドキュメント340のローカルなドキュメント識別子とドキュメント340のグローバルなドキュメントの識別子とを含み、直接的に又は間接的に(例えば、連想配列を通じて)ユニークにドキュメント340を識別する。
【0137】
[0145] 同様に、本説明において、明示的に説明がない限り、ドキュメントネームスペースの”ドキュメントネームスペースの識別子”は、ドキュメントネームスペースの識別子の全ての取り得る形式を参照し得、当該ドキュメントネームスペースの識別子は、ローカルなドキュメントネームスペースの識別子とグローバルなドキュメントネームスペースの識別子とを含み、ドキュメントネームスペースを直接的に又は間接的に(例えば、連想配列を通じて)ユニークにドキュメントネームスペースを識別する。
【0138】
[0146] 本発明のいくつかの実施形態によれば、クエリ(例えば332)がインデックスサーバ(例えば430B)において受信されると、インデックスサーバのクエリプロセッサ327は、対応する登録リスト520における登録リストを識別するために、辞書510へのキーとしてクエリのクエリトークンを使用する。クエリに複数のクエリトークンがある場合、対応する登録リストは、複数のクエリのトークンが論理式として互いにどのように関連するのかに従って適切にマージされうる。
【0139】
[0147] 本発明の実施形態では、インデックスサーバのクエリプロセッサ327は、クエリに対する回答(例えば417A)に含まれ得る、対応する登録リスト内で識別されるドキュメント340を、検索されるべき認証されたドキュメントネームスペースに属すドキュメント340に制限する。本発明のいくつかの実施形態では、インデックスサーバのクエリプロセッサ327は、対応する登録リスト内でドキュメント識別子に関連付けられたドキュメントネームスペースの識別子を比較することによって、(ルーティングサーバ(例えば420A)からの、クエリを含むネットワーク要求に含まれる)クエリと関連付けられた認証されたドキュメントネームスペースの識別子に限定する。クエリを他の方法で満たす、ドキュメント340のドキュメント識別子と関連付けられたドキュメントネームスペースの識別子が、クエリと関連付けられた認証されたドキュメントネームスペースの識別子と一致する場合、ドキュメント340はクエリに対する回答に含まれうる。しかしながら、ドキュメント識別子と関連付けられたドキュメントネームスペースの識別子が、クエリと関連付けられた認証されたドキュメントネームスペースの識別子と一致しない場合、そのドキュメントが他の方法でクエリを満たす場合であっても、ドキュメント340はクエリに対する回答に含まれない。このように、インデックスサーバ430のクエリプロセッサ327は、回答を、検索されるべきクエリと関連付けられた認証されたドキュメントネームスペースに属すドキュメント340のみに制限しうる。
【0140】
[0148] 本発明のいくつかの実施形態では、インデックスシャードは複数の辞書510/登録520のペアを格納する。例えば、インデックスシャードは、インデックスシャードに関連付けられた複数のドキュメントネームスペースのそれぞれに対して、又は、インデックスシャードに関連付けられた複数のドキュメントネームスペースのグループのそれぞれに対して、辞書510と対応する登録520とを格納し得る。
【0141】
[0149] 本発明の複数の実施形態では、インデックスシャード(328B)は、インデックスデータファイル351の識別可能な別々のセットと、インデックスシャードに関連付けられるドキュメントネームスペースのグループの識別子に従う揮発性メモリデータ構造とに組織化され得る。この場合、分離された辞書510、又は、インデックスシャードに割り当てられるドキュメントネームスペースのグループのそれぞれに対して分離された辞書510と対応する登録520が存在し得る。クエリ(例えば332)がインデックスサーバ(例えば430B)において受信されると、インデックスサーバのクエリプロセッサ327は、ルーティングサーバからのネットワーク要求における、認証されたドキュメントネームスペースの識別子と関連付けられたドキュメントネームスペースのグループの識別子を用いて、アクセスすべき、辞書510或いは辞書510と対応する登録520を決定することができる。
【0142】
[0150] 本発明の複数の実施形態では、インデックスシャード(328B)は、インデックスデータファイルの識別可能な別々のセットと、インデックスシャードに関連付けられるドキュメントネームスペースの識別子に従う揮発性メモリデータ構造とに組織化され得る。この場合、分離された辞書510、又は、インデックスシャードに割り当てられるドキュメントネームスペースのそれぞれに対して分離された辞書510と対応する登録520が存在し得る。クエリ(例えば332)がインデックスサーバ(例えば430B)において受信されると、インデックスサーバのクエリプロセッサ327は、ルーティングサーバからのネットワーク要求における、認証されたドキュメントネームスペースの識別子と関連付けられたドキュメントネームスペースのグループの識別子を用いて、アクセスすべき、辞書510或いは辞書510と対応する登録520を決定することができる。
【0143】
[0151] 本発明のいくつかの実施形態では、インデックスシャードは複数の辞書510/登録520のペアを、クエリの異なる種別を処理するために格納する。例えば、インデックスシャードに関連付けられた、所定のドキュメントネームスペース又はドキュメントネームスペースのグループに対し、インデックスシャードは、非コンプリーションクエリを処理するための第1の辞書510/登録520のペアと、コンプリーションクエリを処理するための第2の辞書510/登録520とを格納し得る。分離された辞書510/登録520のペアを格納することにより、構造と、辞書510のコンテンツ及び対応する登録520とが、所定の種別のクエリを処理するために適合したものになる。例えば、コンプリーションクエリを処理するための辞書510は、ドキュメントの全テキストと対立するインデックストークンとして、ドキュメントのファイル名に対するインデックストークンのみを含んで、不揮発性メモリ(例えばフラッシュメモリ)又は揮発性メモリ(例えばRAM)に格納する際に消費されるバイトに関して辞書のサイズを低減し得る。これにより、クエリプロセッサ327がより高速にコンプリーションクエリを処理することを可能にする。
【0144】
[0152] インデックスサーバ(例えば430C)のクエリプロセッサ327は、より効率的なアクセスのため、辞書510(又はその一部)を不揮発性メモリ(例えばフラッシュメモリ)から揮発性メモリ(例えばRAM)に読み込む。登録リスト(例えば登録リスト2)は、より効率的なアクセスのため、インデックスサーバ(例えば430C)の不揮発性メモリ(例えばフラッシュメモリ)に格納され、及び/又は、インデックスサーバの揮発性メモリ(例えばRAM)にキャッシュされうる。キャッシュされた登録リストは、例えば最長未アクセスポリシーなどのキャッシュ退避ポリシーに従って、インデックスサーバの揮発性メモリから退避される。インデックスサーバ(例えば430B)のクエリプロセッサ327はまた、登録520から検索された複数の登録リストについて実行されるマージアルゴリズムの結果として生成される登録リストを、揮発性メモリにキャッシュしうる。このようにすることで、インデックスサーバのクエリプロセッサ327は、複数の登録リストについてマージアルゴリズムを後に実行しなければならなくなることを回避し得る。
【0145】
[0153]
図5の参照を継続して、本発明のいくつかの実施形態では、コンプリーションクエリの処理を容易にするため、辞書510内のインデックストークンはドキュメントネームスペースの識別子によってプレフィックスされ得、プレフィックスされたインデックストークンは、辞書内においてプレフィックスされたインデックストークンの辞書順でソートされうる。この方法で構成される辞書510は、以下では”コンプリーション(completion)”辞書として参照される。
【0146】
[0154] 本発明のいくつかの実施形態では、プレフィックスされたインデックストークンに関連付けられた登録リストは、プレフィックスされたインデックストークンにおいて識別されるドキュメントネームスペースに属す、ドキュメント340のドキュメント識別子を含みうる。従って、コンプリーション辞書が、1つ以上のドキュメントネームスペースに対するプレフィックスされたインデックストークンを含む場合、インデックストークンは、1度以上、複数のドキュメントネームスペースのそれぞれに対して一度の頻度で、コンプリーション辞書に現れ得る。
【0147】
[0155] 例えば、コンプリーション辞書におけるプレフィックスされたインデックストークンは、<ドキュメントネームスペースの識別子>:<インデックストークン>の形式を有し得、ここで<ドキュメントネームスペースの識別子>は、ドキュメントネームスペースを識別する文字列データフィールド、<インデックストークン>はインデックストークンの文字を含む文字列データフィールドである。コロン”:”又は他の文字は、セパレータ文字として用いられて、プレフィックスされたインデックストークン内の文字列データフィールドを分割する。プレフィックスされたインデックストークンの例は、[abcd:プライベート](囲い括弧は除く)であり、ここで、”abcd”はドキュメントネームスペースの識別子であり、”プライベート”(private)はインデックストークンである。
【0148】
[0156] プレフィックスされたインデックストークンの辞書順ソートに従ってコンプリーション辞書内のプレフィックスされたインデックストークンをソートすることにより、インデックスサーバ(例えば430B)のクエリプロセッサ327は、コンプリーションクエリのコンプリーショントークンに対して、より効率的に可能性のあるコンプリーション要素を識別することができる。特に、同一のドキュメントネームスペースに属し且つコンプリーショントークンと一致するプレフィックスを共有するコンプリーション辞書におけるインデックストークンは、プレフィックスされたインデックストークンの辞書順ソートの結果として、コンプリーション辞書が不揮発性メモリ又は揮発性メモリに格納される際に、(連続して又は隣接するメモリロケーションに)互いに近くに格納され(クラスタ化され)うる。このようなクラスタリングは、クエリプロセッサが、コンプリーショントークンに対する可能性のあるコンプリーション要素を決定するために、コンプリーション辞書にアクセスする場合に、連続的なメモリアクセスを容易にし、また、コンプリーション辞書にアクセスする場合のランダムメモリアクセスを低減又は排除する。
【0149】
[0157] 例えば、ドキュメントネームスペース”abcd”に対するインデックストークン”concession”、”conclude”、”conclusion”、”concrete”及び”concurrent”は、プレフィックスされたインデックストークン”abcd:concession”、”abcd:conclude”、”abcd:conclusion”、”abcd:concrete”及び”abcd:concurrent”として、それぞれメモリ内で互いに近く格納され得る。例えば、コンプリーショントークン”con”を用いるコンプリーションクエリであって、且つ、例えば”abcd”の識別子を有する特定のドキュメントネームスペースが、検索される認証されたドキュメントネームスペースである、コンプリーションクエリを処理する場合、クエリプロセッサは、コンプリーション辞書にアクセスするためのインデックスキー”abcd:con”を生成し得る。辞書順ソートの結果として、プレフィックスされたインデックストークンはメモリ内で互いに近くに格納されるため、クエリプロセッサは、プレフィックスされたインデックストークンがメモリ内で互いに近くに格納されていない場合よりも、ドキュメントネームスペース”abcd”内のコンプリーショントークン”con”に対してあり得るコンプリーション要素として、インデックストークン”concession”、”conclude”、”conclusion”、”concrete”及び”concurrent”をより効率的に識別することができる。
【0150】
[0158] プレフィックスされたインデックストークンの辞書順ソートの結果として、コンプリーション辞書のプレフィックスされたインデックストークンがメモリ内で互いに近くに格納されることに加えて、ソートされたプレフィックスされたインデックストークンに関連付けられるコンプリーション辞書の、対応する登録リストの格納場所へのポインタ(例えばアドレス)もまた、プレフィックスされたインデックストークンの辞書順ソートの結果として、メモリ内で互いに近くに格納されうる。特に、プレフィックスされたインデックストークンに対する登録リストの格納場所へのポインタは、メモリ内のプレフィックスされたインデックストークンの近くに格納されうる。例えば、ポインタとプレフィックスされたインデックストークンとは、同一のメモリブロック、若しくは、連続する又は隣接するメモリブロックの同じ組に格納されうる。従って、クエリプロセッサが、例えば、ドキュメントネームスペース”abcd”内のコンプリーショントークン”con”に対してあり得るコンプリーション要素として、インデックストークン”concession”、”conclude”、”conclusion”、”concrete”及び”concurrent”をより効率的に識別することができるだけでなく、クエリプロセッサはまた、辞書順ソートの結果として、これらのインデックストークンに対応する登録リストの格納場所をより効率的に識別することができる。
【0151】
[0159] 本発明のいくつかの実施形態では、プレフィックスされたインデックストークンの辞書順にコンプリーション辞書のプレフィックスされたインデックストークンをソートすることは、各レコードが、プレフィックスされたインデックストークンと、プレフィックスされたインデックストークンに対する登録リストが格納された、揮発性又は不揮発性メモリの場所へ関連付けられたポインタと、を含むコンプリーション辞書の複数のレコード(データ構造)をソートすることを含む。複数のレコードは、プレフィックスされたインデックストークンの辞書順に従ってソートされうる。そして、ソートされたレコードは、連続した又は隣接したコンピュータメモリ(例えば揮発性メモリ又は不揮発性メモリ)のブロックに格納されうる。
【0152】
[0160] 以降の説明は、プロセッサの制御下で1つ以上のコンピューティングデバイスの動作を行わせる、コンピュータで実行可能な命令を用いて実施されうる方法のステップを示す。コンピュータで実行可能な命令は、CD、DVD、フラッシュメモリ等のコンピュータで読み取り可能な記録媒体に格納されうる。コンピュータで実行可能な命令はまた、例えば、インターネット上の記憶場所(例えば、ウェブサーバ)からダウンロード及びインストールするための、ダウンロード可能で、コンピュータで実行可能な命令のセットとして格納されうる。
【0153】
[0161] 方法のステップに対する所定の順序が図及び以降の説明から暗示され得る一方で、文脈が明確に示さない限り、当該方法のステップは示され且つ/又は説明されたものとは異なる順序で実行されうることが理解されるだろう。更に、文脈が明確に示さない限り、方法のステップは、互いに並行して(同時に)実行され得る。
【0154】
<個人用検索のための処理>
[0162]
図6は、本発明の実施形態に従って、マルチユーザ検索システム320のサービングシステム325によって実行される個人用検索の処理600を示すフロー図である。
【0155】
[0163] ステップ602において、以下で説明されるように、フロントエンドサーバ326Aによって、検索クエリ332Aが認証されたユーザのエンドユーザコンピューティングデバイス311Aから取得される。検索クエリ332Aは、コンプリーションクエリ又は非コンプリーションクエリでありうる。
【0156】
[0164] ステップ604において、フロントエンドサーバ326Aは、以下で説明されるように、検索するための1つ以上の認証されたドキュメントネームスペースの1つ以上の識別子を決定する。そして、フロントエンドサーバ326Aは、以下で説明されるように、クエリ332Aと、検索するための1つ以上の認証されたドキュメントネームスペースの1つ以上の識別子とを、ルーティングサーバ420Aに転送する。
【0157】
[0165] ステップ606において、ルーティングサーバ420Aは、以下で説明されるように、クエリ332Aがルーティングされるべき1つ以上のインデックスサーバ430を決定する。どのインデックスサーバ430にクエリ332Aをルーティングするかを決定するための、ルーティングサーバ420Aによって実行される本発明のいくつかの実施形態における処理は、以下及び
図7に関して以降で説明されるようであってよい。
【0158】
[0166] ステップ608において、ルーティングサーバ420Aは、以下で説明されるように、ステップ606においてクエリ332Aをルーティングするように決定された1つ以上のインデックスサーバ430のそれぞれに、クエリ332Aをルーティングする。
【0159】
[0167] ステップ610において、以下で説明されるように、クエリ332Aは、ステップ608においてクエリ332Aがルーティングされた1つ以上のインデックスサーバ430のそれぞれにおける、クエリプロセッサ327によって処理される。上述したように、検索クエリ332Aは、コンプリーションクエリ又は非コンプリーションクエリでありうる。クエリ332Aが非コンプリーションクエリである場合に、クエリ332Aに対する個別化された回答(例えば418)を生成するための、インデックスサーバ(例えば430)においてクエリプロセッサ327によって実行される本発明のいくつかの実施形態における処理は、以下及び
図8に関して以降で説明されるようであってよい。クエリ332Aがコンプリーションクエリである場合に、クエリ332Aに対する個別化された回答(例えば418)を生成するための、インデックスサーバ(例えば430)においてクエリプロセッサ327によって実行される本発明のいくつかの実施形態における処理は、以下及び
図9に関して以降で説明されるようであってよい。
【0160】
[0168] ステップ612において、以下で説明されるように、ルーティングサーバ420Aは、ステップ608においてクエリ332Aがルーティングされたインデックスサーバ430のそれぞれからの、クエリ332Aに対する個別化された回答(例えば418A)を受信してもよい。クエリ332Aがステップ608において複数のインデックスサーバ430にルーティングされた場合、ルーティングサーバ420Aは、ステップ612において複数の対応する個別化された回答418を受信してもよい。
【0161】
[0169] ステップ612においてルーティングサーバ420Aが複数の個別化された回答418を受信した場合、ステップ614においてルーティングサーバ420Aは、以下で説明されるように、複数の個別化された回答を、その後フロントエンドサーバ326Aへ返信される、1つの個別化された回答334Aに統合してもよい。
【0162】
[0170] ステップ616において、以下で説明されるように、フロントエンドサーバ326Aは、クエリ332Aを送信したエンドユーザコンピューティングデバイス311Aへ、クエリ332に対する個別化された回答334Aを返す。
【0163】
<決定論的なクエリのルーティング>
[0171]
図7は、本発明のいくつかの実施形態に従って、所定のドキュメントネームスペースに属すドキュメント340をインデックス化するインデックスシャード(例えば328B)を格納するインデックスサーバ(例えば430)を決定する、ルーティングサーバ420Aによって実行される処理700を示すフロー図である。
【0164】
[0172] ステップ702において、ルーティングサーバ420Aは、検索するための認証されたドキュメントネームスペースのそれぞれに対する識別子を取得する。例えば、ルーティングサーバ420Aは、クエリ332Aをも含む、フロントエンドサーバ326Aから受信したネットワーク要求において識別子を取得してもよい。
【0165】
[0173] ステップ704において、ルーティングサーバ420Aの決定論マッピング機能416は、認証されたドキュメントネームスペースの識別子のそれぞれにハッシュアルゴリズム(例えばメッセージダイジェストアルゴリズム)を適用して、以下に説明するように、認証されたドキュメントネームスペースの識別子のそれぞれに対してハッシュ値hvを生成する。あらゆる数の異なるハッシュアルゴリズムを用いてよい。しかし、用いられるハッシュアルゴリズムは、ハッシュアルゴリズムが所定の認証されたドキュメントネームスペースの識別子に対して同一のハッシュ値を矛盾なく出力するという意味で決定論的でなければならない。ステップ704において使用されてよい、いくつかの適切なハッシュアルゴリズムの非限定的な例は、MD4、MD5、SHA−1及びSHA−2メッセージダイジェストアルゴリズムを含む。
【0166】
[0174] ステップ706において、検索するための認証されたドキュメントネームスペースのそれぞれに対し、ルーティングサーバ402Aの決定論マッピング機能416は、以下で説明するように、認証されたドキュメントネームスペースに対してステップ704で計算したハッシュ値hvを係数kによって除算した余りrを計算する。
【0167】
[0175] ステップ708において、検索するための認証されたドキュメントネームスペースのそれぞれに対し、ルーティングサーバ402Aの決定論マッピング機能416は、以下で説明するように、認証されたドキュメントネームスペースに対してステップ706で計算した余りrがエントリのキーの範囲内である、マッピング417内のマッピングエントリを識別する。上述したように、マッピング417はキーと値とを含んでよい。エントリのキーは、0からk−1の範囲内で連続する値のサブレンジ(sub-range)を定義してもよい。エントリの値は、インデックスサーバ(例えば430B)のホスト名およびネットワークアドレスの少なくともいずれかを含んでよい。例えば、エントリの値は、インデックスサーバのホスト名又はネットワークアドレスを含んでもよい。ここで、ルーティングサーバ420Aは、他の様々な情報にクエリ332Aを含んだネットワーク要求を生成し、インデックスサーバへ送信してよい。
【0168】
[0176] ステップ710において、ステップ708で識別したインデックスサーバのそれぞれに対し、ルーティングサーバ420Aは、以下に説明するように、クエリ332Aをインデックスサーバへルーティングする。
【0169】
<非コンプリーションクエリの処理>
[0177]
図8は、本発明のいくつかの実施形態に従って、クエリ332Aが非コンプリーションクエリである場合に、クエリ332Aに対する個別化された回答(例えば418)を生成するための、インデックスサーバ(例えば430)におけるクエリプロセッサ327によって実行される処理800を示すフロー図である。クエリ332Aは、ネットワーク要求においてルーティングサーバ(例えば420A)から受信されてよい。ネットワーク要求はまた、検索するための1つ以上の認証されたドキュメントネームスペースの1つ以上の識別子を含んでよい。加えて、そのような認証されたドキュメントネームスペースの識別子のそれぞれは、ネットワーク要求内で、ドキュメントネームスペースが属すドキュメントネームスペースのグループの識別子と関連付けられ得る。
【0170】
[0178] ステップ802において、インデックスサーバのクエリプロセッサ327は、アクセスするためのインデックスサーバにおけるインデックスシャード(例えば320B)の1つ以上のインデックスを決定する。そのような各インデックスは、インデックスデータベースファイル351内に、インデックスサーバの不揮発性メモリ(例えばフラッシュメモリ)に格納された辞書(例えば510)と対応する登録(例えば520)を含む。そのような各インデックスはまた、揮発性メモリの構成要素を有してもよい。例えば、インデックスの辞書は、インデックスサーバの揮発性メモリに格納されてもよい。加えて、インデックスの登録からの様々な登録リストは、インデックスサーバの揮発性メモリに時々キャッシュされてもよい。クエリプロセッサ327は、キャッシュされた登録リストを、キャッシュ退避ポリシー(例えばLRU)に従って、揮発性メモリから退避してよい。
【0171】
[0179] いくつかの実施形態に従って、インデックスのインデックスデータベースファイル351は変更不可能なものとして扱われ、インデックスへの更新はインデックスサーバの揮発性メモリに格納される。この更新は、ドキュメント340がインデックスにインデックス化されるべき新たなインデックストークンと、ドキュメント340がもはやインデックスにインデックス化されるべきでないインデックストークンとを含んでよい。より具体的に、インデックスサーバにおける揮発性メモリに格納されるインデックスのインデックストークンに対する”デルタ(delta)”登録リストは、インデックスのインデックスデータベースファイル351に格納されたインデックストークンに対する”基礎(base)”登録リストへの更新を反映してよい。
【0172】
[0180] 例えば、インデックスサーバ(例えば430A)におけるインデックスのインデックスデータベースファイル351が、”solved”、”two”及び”problem”のトークンによってドキュメントD2をインデックス化しているとする。この場合、インデックスデータベースファイル351は、個々が”solved”、”two”及び”problem”のインデックストークンのそれぞれに対するものである、3つの基礎登録リスト(base posting list)を含んでよい。次に、ドキュメントD2が編集されて、”solved two problems”から”solved three problems”に置き換えられたとする。次に、インデックスサーバは、ドキュメントD2が、もはやインデックストークン”two”によってインデックス化されるべきではなく、現在はインデックストークン”three”によってインデックス化されるべきであることを特定する、1つ以上のインデックス変形352を受信するものとする。これらの変形352を表すため、インデックストークン”two”に対するデルタ登録リストがインデックスサーバの揮発性メモリに格納されて、ドキュメントD2がもはやインデックストークン”two”によってインデックス化されるべきではないことを(例えば削除ビットベクトルを用いて)表してよく、そして、インデックストークン”three”に対する他のデルタ登録リストがインデックスサーバの揮発性メモリに格納されて、ドキュメントD2がインデックストークン”three”によってインデックス化されるべきであることを(例えば、登録リスト内のドキュメントD2の識別子を含むことによって)表してよい。これらの変形352を表すために、インデックスデータベースファイル351を修正する必要がない。クエリ(例えば332A)を処理する場合、インデックスサーバのクエリプロセッサ327は、(RAMにキャッシュされていてよい)インデックスデータベースファイル351内の所定のクエリトークンに対する基礎登録リストと、揮発性メモリに格納された所定のクエリトークンに対するデルタ登録リストとの両方を情報交換してよい。クエリプロセッサ327は、デルタ登録リストと基礎登録リストとをマージして、所定のクエリトークンを満たすドキュメントを決定してよい。
【0173】
[0181] いくつかの実施形態に従って、インデックスサーバのクエリプロセッサ327は、ステップ802において、ルーティングサーバ420Aからのネットワーク要求内の、ドキュメントネームスペースのグループの識別子に基づいて、アクセスするインデックスを決定する。例えば、クエリプロセッサ327は、ルーティングサーバ420Aからのネットワーク要求内の、ドキュメントネームスペースのグループの識別子に基づいて、特定のインデックスデータベースファイル351及び揮発性メモリ内の特定のデータ構造(例えば辞書、登録リストなど)の少なくともいずれかへのアクセスを決定してよい。
【0174】
[0182] ステップ804において、ステップ802において決定したアクセスするための各インデックスに対して、インデックスから、クエリ332A内のクエリトークンのための登録リストが読み出される。このような読み出しは、インデックスサーバにおける不揮発性メモリに格納された登録リストを検索して、インデックスサーバにおける揮発性メモリ内にこの登録リストを格納することを含んでよい。いくつかの場合には、登録リストは、インデックスサーバにおける揮発性メモリに既に格納(キャッシュ)されていてもよい。この場合、インデックスサーバにおける不揮発性メモリから登録リストを検索する必要はないかもしれない。
【0175】
[0183] ステップ806において、複数の登録リストがステップ804において読み出された場合、複数の登録リストは適宜マージされて、クエリ332Aを満たす(一致する)1つ以上のドキュメントの1つ以上の識別子を含んでよい、1つの”結果”登録リストが生成される。クエリを満たす(一致する)ドキュメントを決定する目的に対して、様々な異なるアルゴリズムを登録リストをマージするために用いることができる。本発明の実施形態は、特定のマージアルゴリズムに何ら限定されない。1つの登録リストのみがステップ804において読み出された場合、例えば、クエリ332A内には1つのクエリトークンしかないため、当該1つの読み出された登録リストが結果登録リストとなってよい。
【0176】
[0184] ステップ808において、インデックスサーバのクエリプロセッサ327は、ランキングアルゴリズムに従って、クエリ332Aと一致する、結果登録リスト内のドキュメントをランクで順番付けする。ランキングアルゴリズムは、クエリ332Aに関して一致するドキュメントのそれぞれについてランキングスコアを計算することを含んでよい。種々の異なるランキングアルゴリズムが使用されてよく、本発明の実施形態はあらゆる特定のランキングアルゴリズムに限定されない。例えば、このランキングアルゴリズムは、クエリトークンと一致するドキュメントとに対する、クエリ依存型メトリクス及びクエリ非依存型メトリクスの少なくともいずれかに基づいて、ランキングスコアを計算してもよい。
【0177】
[0185] ステップ810において、インデックスサーバのクエリプロセッサ327は、クエリ332Aに対する個別化された回答(例えば418A)を生成し、ルーティングサーバ420Aへネットワーク応答において回答を送信する。個別化された回答は、検索するための認証されたドキュメントネームスペースに属す、一致するドキュメントのみを特定してよい。このことを容易にするため、結果登録リスト内で特定された一致するドキュメントのそれぞれは、一致するドキュメントが属すドキュメントネームスペースの識別子と関連付けられてよい。インデックスサーバのクエリプロセッサ327は、ドキュメントが個別化された回答のなかから特定されるべきかを判定するために、一致するドキュメントのドキュメントネームスペースの識別子と、ルーティングサーバ420Aからのネットワーク要求に含まれる、認証されたドキュメントネームスペースの識別子のセットとを比較してよい。この比較において、一致するドキュメントが認証されたドキュメントネームスペースに属す場合、一致するドキュメントは個別化された回答から特定されてよい。そうでない場合、一致するドキュメントは、個別化された回答において特定され得ない。
【0178】
<コンプリーションクエリの処理>
[0186]
図9は、本発明のいくつかの実施形態に従って、クエリ332Aがコンプリーションクエリである場合に、クエリ332Aに対する個別化された回答(例えば418)を生成するための、インデックスサーバ(例えば430)におけるクエリプロセッサ327によって実行される処理900を示すフロー図である。
【0179】
[0187] コンプリーションクエリ332Aは、ネットワーク要求においてルーティングサーバ(例えば420A)から受信されてよい。ネットワーク要求はまた、検索するための1つ以上の認証されたドキュメントネームスペースの1つ以上の識別子を含んでよい。加えて、そのような認証されたドキュメントネームスペースの識別子のそれぞれは、ネットワーク要求内で、ドキュメントネームスペースが属すドキュメントネームスペースのグループの識別子と関連付けられ得る。加えて、ネットワーク要求は、コンプリーションクエリ332のどのクエリトークンがコンプリーショントークンであるかを示す或いは特定してよい。コンプリーションクエリ332Aにおける任意の他のクエリトークンは、コンプリートトークンとして考慮される。
【0180】
[0188] 本発明のいくつかの実施形態に従って、インデックスサーバ(430B)におけるインデックスシャード(例えば328B)は、当該インデックスシャードに割り当てられた1つ以上のドキュメントネームスペースグループのそれぞれに対する、”コンプリーション(completion)”インデックスを含んでよい。そのような各コンプリーションインデックスは、コンプリーションインデックスのドキュメントネームスペースのグループに属す1つ以上のドキュメントネームスペースに、共にドキュメントをインデックス化するコンプリーション辞書と対応する登録を含んでよい。
【0181】
[0189] 本発明のいくつかの実施形態に従って、インデックスサーバ(430A)のクエリプロセッサ327は、コンプリーションインデックスのドキュメントネームスペースのグループに属す、検索するための認証されたドキュメントネームスペースに対するコンプリーションクエリ332Aを処理する場合に、ドキュメントネームスペースグループに対するコンプリーションインデックスにアクセスする。
【0182】
[0190] 本発明のいくつかの実施形態に従って、コンプリーションインデックスは、ドキュメントのファイル名のみをインデックス化する。すなわち、コンプリーション辞書のインデックストークンは、コンプリーションインデックスのドキュメントネームスペースグループに属す1つ以上のドキュメントネームスペースにおけるドキュメントのファイル名から抽出されたトークンに限定される。このようにして、コンプリーションインデックスのサイズが、全テキストのインデックス又はドキュメントネームスペースに対する他のインデックスより相対的に小さくなり得る。これにより、インデックスサーバのクエリプロセッサ327によってコンプリーションクエリ332のより効率的な処理を促進する一方で、同時にコンプリーションクエリ332に関連する回答418を提供できるようにする。
【0183】
[0191] 上述したように、コンプリーション辞書は、辞書順のソート順でソートされた、プレフィックスされたインデックストークンを含む。そのようなインデックストークンのそれぞれは、ドキュメントネームスペースの識別子にプレフィックスされたインデックストークンを含む。ソートされているプレフィックスされたインデックストークンは、揮発性メモリ及び不揮発性メモリの少なくともいずれかに、ソートされた順番で互いに近くに格納(クラスタ化)されてよい。このようにして、プレフィックスされたインデックストークンをソート順で繰り返すことは、繰り返しの間の逐次的なメモリアクセスを容易にし、繰り返しの間のランダムなメモリアクセスを減らし得る。これにより、インデックスサーバのクエリプロセッサ327が、共通のプレフィックスを共有するコンプリーション辞書においてプレフィックスされたインデックストークンのセットにわたって繰り返すことを、より効率化することができる。
【0184】
[0192] ここで再び
図9を参照すると、ステップ902において、インデックスサーバのクエリプロセッサ327は、1つ以上のコンプリーション辞書にアクセスする際に用いるための、コンプリーションクエリ332Aのクエリトークンに対するインデックスキーを生成する。一般に、インデックスキーは、コンプリーション辞書内のプレフィックスされたインデックストークンの形式と一致する形式で、認証されたドキュメントネームスペースの識別子を用いてクエリトークンをプレフィックスすることによって生成される。例えば、コンプリーション辞書内のプレフィックスされたインデックストークンの形式が<ドキュメントネームスペースの識別子>:<インデックストークン>である場合、生成されるインデックスキーの形式は、<認証されたドキュメントネームスペースの識別子>:<クエリトークン>の形式であってよい。
【0185】
[0193] ステップ902において、インデックスサーバのクエリプロセッサ327は、各クエリトークンに対する複数のインデックスキーであって、検索するための複数の認証されたドキュメントネームスペースの識別子のそれぞれに対するインデックスキーを生成してよい。ここで、検索するための認証されたドキュメントネームスペースのそれぞれは、インデックスサーバのインデックスシャードに割りあてられる。
【0186】
[0194] ステップ904−916は、ルーティングサーバ420Aからのネットワーク要求において特定される、検索するための認証された各ドキュメントネームスペースに対して、インデックスサーバのクエリプロセッサ327によって実行されてよい。
【0187】
[0195] ステップ904において、所定の検索するための認証されたドキュメントネームスペースに対し、コンプリーションクエリ332Aの任意のコンプリートトークンについてステップ902で生成された、任意のインデックスキーを用いて、所定の認証されたドキュメントネームスペースが属すドキュメントネームスペースのグループに対するコンプリーション辞書にアクセスする。特に、インデックスキーに関連付けられた登録リストは、コンプリーションクエリ332Aのコンプリートトークンに対して読み出される。
【0188】
[0196] ステップ906において、所定の検索するための認証されたドキュメントネームスペースに対し、ステップ904でコンプリートトークンについて読み出された任意の登録リストがマージされ、コンプリーションクエリ332Aのコンプリートトークンに対する”結果”登録リストが生成される。
【0189】
[0197] ルーティングサーバ420Aからのネットワーク要求で特定される、検索するための認証されたドキュメントネームスペースのそれぞれに対して実行されるステップ908−916に加え、ステップ908−916は、コンプリーションクエリ332Aにおけるコンプリーショントークンに対して可能性のあるコンプリーションとして、コンプリーション辞書内で識別される複数の可能性のあるコンプリーショントークンのそれぞれに対して実行されてよい。
【0190】
[0198] 認証されたドキュメントネームスペースに対して実行されるステップ908−916は、一般に、コンプリーショントークンのために生成されたインデックスキーを用いてコンプリーション辞書にアクセスすることと、複数のプレフィックスされたインデックストークンの辞書順で、複数のプレフィックスされたインデックストークンにわたって、停止条件に至るまで繰り返すことを含む。認証されたドキュメントネームスペースにわたって繰り返された、複数のプレフィックスされたインデックストークンのそれぞれは、プレフィックスとして認証されたドキュメントネームスペースの識別子、サフィックスとしてのインデックストークン、及び、プレフィックスである又はインデックストークンと一致するコンプリーショントークンを含んでよい。繰り返しの間はまた、複数のプレフィックスされたインデックストークンの各プレフィックスされたインデックストークンに対し、プレフィックスされたインデックストークンと関連付けられた登録リスト内で識別される任意のドキュメントがコンプリーションクエリを満たすかを判定する。コンプリーションクエリを満たす登録リスト内のドキュメントに対する情報は、コンプリーションクエリに対する回答に返されてよい。いくつかの実施形態では、プレフィックスされたインデックストークンは、ドキュメントのファイル名からのものであり、ドキュメントに対するコンプリーションクエリについての回答において返答される情報は、ドキュメントのファイル名である。
【0191】
[0199] 本発明のいくつかの実施形態では、プレフィックスされたインデックストークンの辞書順で、複数のプレフィックスされたトークンにわたって繰り返す代わりに、プレフィックスされたインデックストークンは、対応する登録リストのサイズの減少順において繰り返す。ここで、登録リストのサイズは登録リストにおいて識別されたドキュメントの数によって決定される。プレフィックスされたインデックストークンをこの順番で繰り返すことにより、大部分のドキュメントがこれによりインデックスされる、コンプリーショントークンに対して可能性のあるコンプリーションが、コンプリーションクエリに対する回答に包含されるかをまず考慮にいれる。
【0192】
[0200] この繰り返しを容易にするため、補助的なネームスペースのトークンごとの頻度マッピング(per-namespace token-frequency mapping)がインデックスサーバにおいて維持されてよい。このマッピングの各エントリは、キー(key)と対応する値(value)とを含む。このような各キーはインデックストークンを含み、このような値のそれぞれは、インデックストークンとドキュメントネームスペースに対するコンプリーション辞書内の登録リストのサイズを含む。補足的なマッピングのエントリは、マッピング内でエントリーキーのインデックストークンの辞書順でソートされ、揮発性メモリ及び不揮発性メモリの少なくともいずれかの隣接する位置に、ソートされた順番で格納(クラスタ化)されてよい。これは、インデックスサーバのクエリプロセッサ327が、コンプリーションクエリ332A内のコンプリーショントークンと一致する共通のプレフィックスを共有する、補足的なマッピング内の全てのインデックストークンをより効率的に識別することを可能にする。ひとたび全てのこのようなインデックストークンが識別されれば、これらは、補足的なマッピングのおいてエントリ値で特定される登録リストのサイズの減少順でソートされる。インデックストークンのソート順の結果は、コンプリーション辞書にアクセスし、コンプリーショントークンに対して可能性のあるコンプリーションを考慮する際の、インデックストークンに対する繰り返しの順序である。補足的なマッピングはインデックストークンに対して実際の登録リストを格納しないため、この補足的なマッピングは、コンプリーションインデックスのバイト数に関して、サイズにおいてずっと小さくなってよい。結果として、インデックストークンに対する繰り返しの順序は、繰り返しの順がコンプリーションインデックスそのものから決定されれば、より少ないメモリI/O動作を用いる付加的なマッピングから決定することができる。
【0193】
[0201] ステップ908において、クエリプロセッサ327は、繰り返しの順で、コンプリーショントークンに対する可能性のあるコンプリーションである次のインデックストークンを決定する。説明したように、繰り返しの順は、コンプリーショントークンと一致する共通のプリフィックスを共有するインデックストークンの辞書順に基づく、又は、インデックストークンに対する登録リストのサイズの減少順に基づくことができる。
【0194】
[0202] ステップ910において、クエリプロセッサ327は、繰り返しの中のステップ908において決定されたクエリ332A内のコンプリーショントークンに対する現在の可能性のあるコンプリーショントークンについての登録リストを読み出す。いくつかの場合には、現在の可能性のあるコンプリーショントークンについての登録リストは、インデックスサーバにおける揮発性メモリに既に格納されていてもよい。この場合、不揮発性メモリから登録リストを検索する必要はないかもしれない。
【0195】
[0203] ステップ912において、コンプリーションクエリ332Aに任意のコンプリートトークンがあった場合、ステップ906において決定されたコンプリートトークンについての結果登録リストは、繰り返しの中のステップ910において決定されたコンプリーショントークンに対する現在の可能性のあるコンプリーショントークンについての登録リストにマージされる。このマージから生じるコンプリーションクエリ332Aに対するこの現在の”結果”登録リストは、コンプリーションクエリ332Aを満たす、認証されたドキュメントネームスペース内の1つ以上のドキュメントの識別子を含んでよい。ここで、コンプリーショントークンは、現在の可能性のあるコンプリーショントークンで置き換えられる。コンプリーションクエリ332Aに任意のコンプリートトークンがなかった場合、コンプリーションクエリ332Aに対する現在の結果登録リストは、繰り返しの中のステップ910における現在の可能性のあるコンプリーショントークンに対する登録リストでありうる。
【0196】
[0204] ステップ914において、コンプリーションクエリ332Aに対する現在の結果登録リストが空でない(例えば、認証されたドキュメントネームスペースにおいて少なくとも1つのドキュメントが識別される)場合、コンプリーションクエリ332Aに対する現在の結果登録リスト内で識別される各ドキュメントの情報は、コンプリーションクエリ332Aに対する回答(例えば418A)において送信されてよい。いくつかの実施形態では、この情報は、ドキュメントのファイル名を含む。
【0197】
[0205] いくつかの実施形態に対し、ドキュメントのファイル名は、コンプリーションクエリ332Aに対する回答(例えば418A)において返信され、現在の可能性のあるコンプリーショントークンで置き換えられたコンプリーショントークンを有するコンプリーションクエリ332Aは、コンプリーションクエリ332Aに対する現在の結果登録リストが空でない場合に、コンプリーションクエリ332Aに対する回答(例えば418A)において戻される。いずれの場合も、コンプリーションクエリ332Aに対する回答(例えば418A)において戻る情報は、ユーザによる選択と他のクエリ332Aとしてのサービングシステム325への送信のために、最終的にエンドユーザコンピューティングデバイスに提示されてよい。
【0198】
[0206] ステップ916において、インデックスサーバのクエリプロセッサ327は、コンプリーションクエリ332Aのコンプリーショントークンに対する、可能性のあるコンプリーショントークンにわたる繰り返しを継続するかを判定する。いくつかの実施形態に従って、クエリプロセッサ327は、停止条件が成立した場合に繰り返しを停止する。いくつかの実施形態に従って、停止条件は、任意の以下の条件が真になった場合に成立する。
・可能性のあるコンプリーショントークンで置き換えられたコンプリーションクエリ332Aにおいて、コンプリーショントークンを有するコンプリーションクエリ332Aを満たすドキュメントの閾値数が特定されている、
・可能性のあるコンプリーショントークンの閾値数が考慮されている、又は、
・クエリ実行タイマの時間を経過している。
【0199】
[0207] ステップ916において停止条件が成立したと判定した場合、コンプリーションクエリ332Aにおけるコンプリーショントークンに対する可能性のあるコンプリーショントークンについての繰り返しを終了する。そうでない場合、ステップ908において、次の可能性のあるコンプリーショントークンを用いて繰り返しが再び継続する。
【0200】
[0208] コンプリーションクエリを処理する上述した処理は、エンドユーザに多くの利益を提供する。1つは、この処理は、興味のあるドキュメントを識別する回答をユーザが受信するために要する時間を低減することができる。他には、この処理は、興味のあるドキュメントを見つけるためにユーザが検索フィールドに入力するキーストロークの数を低減することができる。更に他の理由は、この処理は、ユーザがトークンの正しいスペルを覚えておく負担を抑制することができる。
【0201】
[0209] いくつかの実施形態のおいて、上述した処理は、ドキュメントのファイル名に対する、個人用の検索クエリの自動コンプリーションを提供したが、上述した処理は、他の実施形態においてドキュメントコンテンツに対して、個人用の検索クエリの自動コンプリーションを提供する。
【0202】
<拡張及び代替例>
[0210] 本発明は、1つの好ましい実施形態と所定の代替形態への特定の参照と共にいくつかの詳細を説明したが、本発明を特定の実施形態やこれらの特定の代替形態に限定する意図はない。従って、当業者は、当該好ましい実施形態に本発明の開示から離れること無く変形がなされてもよいことを理解するであろう。