(57)【特許請求の範囲】
【請求項１】
個人用検索のためのシステムであって、
複数のインデックスシャードを格納する複数のインデックスサーバであって、前記複数のインデックスシャードの各インデックスシャードが複数のドキュメントをインデックス化するものであり、前記複数のドキュメントのうちの、前記各インデックスシャードによってインデックス化される各ドキュメントが、複数のドキュメントネームスペースのうちの１つの個別のドキュメントネームスペースに属し、前記１つの個別のドキュメントネームスペースは前記各インデックスシャードと関連付けられる、複数のインデックスサーバと、
認証されたユーザのエンドユーザコンピューティングデバイスから検索クエリを受信する手段と、
前記認証されたユーザがアクセスを許可される認証されたドキュメントネームスペースを決定する手段と、
前記検索クエリに回答するとともに、前記検索クエリを満たしかつ前記認証されたドキュメントネームスペースに属すドキュメントを特定するために、前記認証されたドキュメントネームスペースの識別子に基づいて前記検索クエリに対する回答を限定するクエリプロセッサと、
を含むシステム。
【請求項２】
請求項１に記載のシステムであって、前記クエリプロセッサは、更に、前記認証されたドキュメントネームスペースの識別子に基づいて、前記認証されたドキュメントネームスペースが割り当てられたインデックスシャードを格納する、前記複数のインデックスサーバのインデックスサーバを識別し、前記識別されたインデックスサーバに前記検索クエリを送信するように構成される、システム。
【請求項３】
請求項１に記載のシステムであって、更に、
前記認証されたドキュメントネームスペースの識別子を、前記複数のインデックスサーバのインデックスサーバに決定論的にマッピングする機能と、
前記機能に従って前記検索クエリを前記複数のインデックスサーバのインデックスサーバにルーティングするルーティングサーバと、を含む、システム。
【請求項４】
請求項１に記載のシステムであって、前記複数のインデックスシャードのうちのインデックスシャードは、インデックストークンの辞書と複数の対応する登録リストとを含み、前記複数の登録リストの登録リストは１つ以上のドキュメントの識別子を含み、前記１つ以上のドキュメントの識別子のドキュメントの識別子は、前記ドキュメントの識別子によって識別されるドキュメントが属すドキュメントネームスペースの識別子と関連付けられる、システム。
【請求項５】
請求項１に記載のシステムであって、前記クエリプロセッサは、更に、前記ドキュメントの識別子によって識別されるどのドキュメントが前記認証されたドキュメントネームスペースに属すかを判定するために、前記認証されたドキュメントネームスペースの識別子と、前記複数のインデックスシャードにおけるインデックスシャードの登録リスト内にあるドキュメントの識別子に関連付けられたドキュメントネームスペースの識別子とを比較するように構成される、システム。
【請求項６】
請求項１に記載のシステムであって、更に、前記認証されたユーザの前記エンドユーザコンピューティングデバイスからの要求において前記検索クエリを受信する手段であって、前記要求は前記認証されたドキュメントネームスペースの識別子をも含む、受信する手段を含む、システム。
【請求項７】
請求項１に記載のシステムであって、更に、
前記認証されたユーザがアクセスを許可される、複数の認証されたドキュメントネームスペースを決定する手段を含み、
前記クエリプロセッサは、更に、前記複数の認証されたドキュメントネームスペースの識別子に基づいて、それぞれが（ａ）前記検索クエリを満たし、かつ（ｂ）前記複数の認証されたドキュメントネームスペースの１つに属す、ドキュメントを識別するために、前記検索クエリに対する回答を制限するように構成される、システム。
【請求項８】
複数のインデックスサーバにおいて複数のインデックスシャードを格納するマルチユーザコンピュータシステムであって、前記複数のインデックスシャードの各インデックスシャードは複数のドキュメントをインデックス化するものであり、前記複数のドキュメントのうちの、前記各インデックスシャードによってインデックス化される各ドキュメントは、複数のドキュメントネームスペースのうちの１つの個別のドキュメントネームスペースに属し、前記１つの個別のドキュメントネームスペースは前記各インデックスシャードと関連付けられる、マルチユーザコンピュータシステムにおける、個人用検索の方法であって、
認証されたユーザのエンドユーザコンピューティングデバイスから検索クエリを受信することと、
前記認証されたユーザがアクセスを許可される認証されたドキュメントネームスペースを決定することと、
前記検索クエリを満たしかつ前記認証されたドキュメントネームスペースに属すドキュメントを特定するために、前記認証されたドキュメントネームスペースの識別子に基づいて前記検索クエリに対する回答を限定することと、
を含む、方法。
【請求項９】
請求項８に記載の方法であって、更に、
前記認証されたドキュメントネームスペースの識別子に基づいて、前記認証されたドキュメントネームスペースが割り当てられたインデックスシャードを格納する、前記複数のインデックスサーバのインデックスサーバを識別することと、 
前記識別されたインデックスサーバに前記検索クエリを送信することと、を含む、方法。
【請求項１０】
請求項８に記載の方法であって、更に、 
決定論マッピング機能を前記認証されたドキュメントネームスペースの識別子に適用することに基づいて、前記検索クエリを送信する、前記複数のインデックスサーバのインデックスサーバを選択すること、を含む、方法。
【請求項１１】
請求項８に記載の方法であって、前記複数のインデックスシャードのうちのインデックスシャードは、インデックストークンの辞書と複数の対応する登録リストとを含み、前記複数の登録リストの登録リストは１つ以上のドキュメントの識別子を含み、前記１つ以上のドキュメントの識別子のドキュメントの識別子は、前記ドキュメントの識別子によって識別されるドキュメントが属すドキュメントネームスペースの識別子と関連付けられる、方法。
【請求項１２】
請求項８に記載の方法であって、更に、前記ドキュメントの識別子によって識別されるどのドキュメントが前記認証されたドキュメントネームスペースに属すかを判定するために、前記認証されたドキュメントネームスペースの識別子と、前記複数のインデックスシャードにおけるインデックスシャードの登録リスト内にあるドキュメントの識別子に関連付けられたドキュメントネームスペースの識別子とを比較すること、を含む、方法。
【請求項１３】
請求項８に記載の方法であって、更に、
前記認証されたユーザの前記エンドユーザコンピューティングデバイスからの要求において前記検索クエリを受信することであって、前記要求は前記認証されたドキュメントネームスペースの識別子をも含む、受信することを含む、方法。
【請求項１４】
請求項８に記載の方法であって、更に、
前記認証されたユーザがアクセスを許可される、複数の認証されたドキュメントネームスペースを決定することと、
前記複数の認証されたドキュメントネームスペースの識別子に基づいて、それぞれが（ａ）前記検索クエリを満たし、かつ（ｂ）前記複数の認証されたドキュメントネームスペースの１つに属す、ドキュメントを識別するために、前記検索クエリに対する回答を制限することと、を含む、方法。
【請求項１５】
１つ以上のコンピュータプログラムであって、１つ以上のコンピューティングデバイスで実行されると、前記１つ以上のコンピューティングデバイスに請求項８から１４のいずれか１項に記載の方法を実行させる、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]  本開示の実施形態は、一般的に情報検索コンピュータシステムに関し、より詳細には、個人用検索のための手法を有するマルチユーザの検索システムに関する。
【背景技術】
【０００２】
[0002]  コンピュータは膨大な量の情報の中で関連情報を検索するための非常に強力なツールである。インデックスは、コンピュータを使用して、大規模なコーパスの情報の中で注目の情報を効率的に識別するためのありふれた仕組みである。通常のインデックスは、当該キーワードが抽出又は導出される文書情報への、体系化したキーワードのマッピングである。一例として、世界の公開されたアクセス可能なウェブページのインデックスとしては、当該ウェブページの単語を、当該単語を含むウェブページのサブセットへマッピングしてもよい。
【０００３】
[0003]  実際の物理的なインデックスそのもの（例えば、１以上のコンピュータに格納されるインデックスデータ）とシステムのユーザとの間で、検索システムが、ソフトウェアクッション又はレイヤとして通常提供される。本質的には、検索システムは、基本的なインデックスの詳細についてユーザが知る又は気にかけなくてよいようにする。通常、インデックスの情報に対するユーザからの全ての要求は検索システムによって処理される。基本的なインデックスの実装の知識を全てのユーザが有していなくても、例えば、情報に対するユーザの要求に関連する文書が検索システムによってインデックスを用いて識別されうる。この方法では、検索システムは、情報がどのようにインデックスが付与されるか又はアクセスされるかに関係なく関連情報へのアクセスをユーザへ提供する。世界の公開されているアクセス可能なウェブページの中から、関連情報を識別するための１つの良く知られた検索システムは、カリフォルニアのマウンテンデューにあるGoogle（登録商標） Incによって提供されるGOOGLE（登録商標）インターネット検索エンジンである。
【０００４】
[0004]  検索システムの１つの機能は、検索クエリ（ここでは単に短縮して“クエリ（問い合わせ）”）に応答することである。クエリは、１以上の検索タームのセットを含む論理的な表現で定義されてもよく、インデックス化された文書のサブセットの識別子となる。例えば、インターネット検索エンジンからの情報に対する要求の扱いを考慮しなければならない。動作中に、本要求は、通常、サーバコンピュータ上でインデックスからの特定の検索結果（例えば、単語”大学（college）”及び”バスケットボール（basketball）”を含む全てのインターネットウェブページのリスト）を取り出すための１以上のハイパーテキスト転送プロトコル、即ち“ＨＴＴＰ”要求としてクライアントシステムによって発行される。当該要求に応じて、検索システムは、通常、検索ターム“college”及び“basketball”に最も関連するものと考えられるそれらのインターネットウェブページへのハイパーリンクを含むウェブページを返す。
【０００５】
[0005]  インターネット検索エンジンは、インターネット上で公的に利用可能な世界の全ての情報を検索するのに非常に適している。しかしながら、最近では、複数のユーザが、インターネット上で公的にアクセス可能でない、又は、インターネット検索エンジンによってインデックスが付与されていない、かなりの量の個人のデジタル情報を蓄積し始めている。そのような情報は、他の個人のデジタル情報及びプライベートなデジタル情報の中で、例えば、個人のデジタル写真や、学校及び仕事の文書を含むことができる。いくつかの例で、ユーザの個人的なデジタル情報は、定義されたグループユーザの間で共有される。例えば、従業員は、仕事の文書を他の同僚と共有してもよいし、或いは、ユーザはデジタル写真を友達や家族と共有してもよい。
【０００６】
[0006]  複数のユーザが彼ら全ての個人のデジタル情報を格納し管理し始めている１つの方法は、クラウドデータストレージサービスを用いることである。そのようなサービスは、ユーザが彼らの個人デジタル情報を、彼らの種々のエンドユーザコンピューティングデバイスからインターネット又は他のネットワーク上でアクセス可能なサーバコンピュータにアップロードして格納することを許容する。いくつかの例で、当該サービスは、ユーザがエンドユーザコンピューティングデバイスでローカルに情報にアクセスすることを容易にするために、エンドユーザコンピューティングデバイスとサービスサーバコンピュータとの間で情報を同期してもよい。１つの良く知られたクラウドデータストレージサービスは、カルフォルニア・サンフランシスコにあるDropbox社によって提供されるDROPBOXコンテンツ管理サービスである。
【０００７】
[0007]  クラウドデータストレージサービスのユーザは、そのようなサービスによって提供される彼らの個人デジタル情報の検索方法や配置方法を評価するであろう。そのような個人的なデジタル情報は、通常、インターネット上で公的にアクセス可能ではない。本理由及び他の理由において、インターネット検索エンジンは、一般的には、それらのユーザの検索ニーズに合致するような適切なものではない。
【０００８】
[0008]  ここで説明した上記アプローチは、さらに追及しうるアプローチであって、既に着想され、追及されたアプローチではない。したがって、特に示唆しない限り、ここで説明した任意のアプローチが、ここに組み込まれることにより単に先行技術として認識されることが想定されるべきではない。
【図面の簡単な説明】
【０００９】
【図１】[0009]  図１は、本発明のいくつかの実施形態に係る、基本的なコンピューティングデバイスのブロック図である。
【図２】[0010]  図２は、本発明のいくつかの実施形態に係る、コンピューティングデバイスの動作を制御するための基本的なソフトウェアシステムのブロック図である。
【図３】[0011]  図３は、本発明のいくつかの実施形態に係る、マルチユーザ検索システムを含むクライアント／サーバシステムのブロック図である。
【図４】[0012]  図４は、本発明のいくつかの実施形態に係る、マルチユーザ検索システムを含むサービングシステムのブロック図である。
【図５】[0013]  図５は、本発明のいくつかの実施形態に係る、共有ドキュメントインデックスのインデックスシャードのブロック図である。
【図６】[0014]  図６は、本発明のいくつかの実施形態に従って、マルチユーザ検索システムのサービングシステムによって実行される個人用検索の処理を示すフローチャートである。
【図７】[0015]  図７は、本発明のいくつかの実施形態に従って、所定のドキュメントネームスペースに属すドキュメントをインデックス化するインデックスシャードを格納するインデックスサーバを決定する、ルーティングサーバによって実行される処理を示すフロー図である。
【図８】[0016]  図８は、本発明のいくつかの実施形態に従って、非コンプリーションクエリに対する個別化された回答を生成するための、インデックスサーバにおけるクエリプロセッサによって実行される処理を示すフロー図である。
【図９】[0017]  図９は、本発明のいくつかの実施形態に従って、コンプリーションクエリに対する個別化された回答を生成するための、インデックスサーバにおけるクエリプロセッサによって実行される処理を示すフロー図である。
【発明を実施するための形態】
【００１０】
[0018]  以下の詳細な説明において、本開示技術の十分な理解を提供するために、説明の目的で多くの特定事例を記載する。しかしながら、本開示の技術がそれらの特定事例なしで実行されうるということが明らかであろう。他の例では、本開示の技術を不必要に不明りょうにすることを避けるために、既知の構成やデバイスがブロック図の形式で示される。フローチャートに関して、フローチャート内のブロックは方法ステップと、当該方法ステップを実行するための装置要素との両方を表してもよい。手近な特定の実施形態の要件に依存して、対応する装置要素は、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせで構成されてもよい。
【００１１】
[0019]  用語“第１の”及び“第２の”などは、種々の要素を説明するためにここで使用されるものの、それらの要素はそれらの用語によって限定されるべきではないことが理解されるであろう。それらの用語は、他の要素から区別するためにのみ使用される。例えば、本発明の範囲から逸脱することなく、第１のデバイスは、第２のデバイスと称されてもよく、同様に、第２のデバイスは第１のデバイスと称されてもよい。第１のデバイスおよび第２のデバイスは両方ともデバイスであるが、同一のデバイスでなくてもよい。
【００１２】
[0020]  本明細書で使用される専門用語は特定の実施形態のみを説明する目的であり、特許請求の範囲における請求項の限定を意図するものではない。本明細書及び添付の特許請求の範囲で使用されるように、単数形“ａ”、“ａｎ”及び“ｔｈｅ”は、別途明確に言及しない限り、同様に複数形を含むことも意図されている。ここで使用される用語“ａｎｄ／ｏｒ（〜及び〜少なくとも１つ）”は、１以上の関連する記載の項目の可能な全ての組み合わせを参照し、かつ、包含することも理解されるであろう。用語“含む”、“含んでいる”、“備える”、及び“備えている”の少なくとも１つは、本明細書で使用される場合、記載した特徴、整数、ステップ、動作、要素、及びコンポーネントの少なくとも１つの存在を特定するものの、１つ以上の他の特徴、整数、ステップ、動作、要素、コンポーネント及びそれらのグループの少なくとも１つを除外するわけではないこともさらに理解されるであろう。
【００１３】
[0021]  用語“ｉｆ（であれば）”は、文脈に従って、“ｗｈｅｎ（のとき、の場合）”、“ｕｐｏｎ（の際に）”、“判定に応じて”又は“検出に応じて”を意味するように解釈されてもよい。同様に、フレーズ“判定した場合”又は“（記載した条件又はイベントが）検出された場合”は、“判定した際に”、“判定に応じて”、“（記載した条件又はイベント）を検出した際に”又は“（記載した条件又はイベント）を検出することに応じて”とを意味するように解釈されてもよい。
【００１４】
＜概要＞
[0022]  ドキュメントの検索の個別化のための方法を有するマルチユーザコンピュータシステムについて説明する。ドキュメントは、例えば、クラウドデータストレージサービスに持っているユーザのアカウントに関連付けられたドキュメントのような、ユーザの個人ドキュメントの例を含んでもよい。
【００１５】
[0023]  他の態様における本発明の種々の実施形態は、マルチユーザ検索システムにおいて、ユーザ個人のドキュメントにおけるフルテキスト検索、及びファイル名検索を容易にする。
【００１６】
[0024]  他の態様における本発明の種々の実施形態は、コンピュータを用いて情報検索の技術分野における改善をもたらす。
【００１７】
[0025]  他の態様における本発明の種々の実施形態は、クラウドデータストレージサービスプロバイダによって提供されるマルチユーザクラウドデータストレージサービスを改善する。
【００１８】
[0026]  他の態様における本発明の種々の実施形態は、マルチユーザ検索システムの機能構成を改善する。
【００１９】
[0027]  本発明に係る実施形態によれば、マルチユーザコンピュータシステムは、複数のインデックスサーバにおいて複数のインデックスシャードを格納する。複数のインデックスシャードの各インデックスシャードは、複数のドキュメントをインデックス化する。インデックスシャードによってインデックス化された、複数のドキュメントにおける各ドキュメントは、インデックスシャードに割り当てられた複数のドキュメントネームスペースの１つに属す。システムは、認証されたユーザから検索クエリを受信することと、認証されたユーザがアクセスを許可される認証されたドキュメントネームスペースを決定することと、検索クエリに回答するとともに、検索クエリを満たしかつ認証されたドキュメントネームスペースに属すドキュメントのみを特定するために、認証されたドキュメントネームスペースの識別子に基づいて検索クエリに対する回答を限定することと、を含む個人検索の方法を実施する。
【００２０】
[0028]  本発明に係る他の実施形態では、方法は、認証されたドキュメントネームスペースの識別子に基づいて、認証されたドキュメントネームスペースが割り当てられたインデックスシャードを格納する、複数のインデックスサーバにおけるインデックスサーバを識別し、識別されたインデックスサーバに検索クエリを送信するステップを含む。
【００２１】
[0029]  本発明に係る更なる他の実施形態では、方法は、決定論マッピング機能を認証されたドキュメントネームスペースの識別子に適用した結果に基づいて、検索クエリを送信する、複数のインデックスサーバのインデックスサーバを選択すること、を含む。
【００２２】
[0030]  本発明に係る更なる他の実施形態では、複数のインデックスシャードのインデックスシャードは、インデックストークンの辞書と複数の対応する登録リストとを含む。各登録リストは、対応するトークンを１つ以上のドキュメントの識別子にマップし、登録リストのドキュメントの識別子のそれぞれは、ドキュメントの識別子によって識別されるドキュメントが属すドキュメントネームスペースの識別子と関連付けられる。
【００２３】
[0031]  本発明に係る更なる他の実施形態では、方法は、更に、ドキュメントの識別子によって識別されるどのドキュメントが認証されたドキュメントネームスペースに属すかを判定するために、認証されたドキュメントネームスペースの識別子と、複数のインデックスシャードにおけるインデックスシャードの登録リスト内にあるドキュメントの識別子に関連付けられたドキュメントネームスペースの識別子とを比較するステップ、を含む。
【００２４】
[0032]  他の態様において、本発明は、前述したステップを実行するように構成される、コンピュータシステム及びコンピュータで読取可能な媒体を包含する。
【００２５】
＜基本的なコンピュータシステムハードウェア及びソフトウェア＞
[0033]  本開示の技術は、１つ以上のコンピューティングデバイス上で実施されてもよい。そのようなコンピューティングデバイスは、限定はしないが、クライアントコンピュータ、サーバコンピュータ、ネットワークデバイス、モバイルデバイス、セルラー電話、スマートフォン、ラップトップコンピュータ、デスクトップコンピュータ、ワークステーションコンピュータ、携帯情報端末、ブレードサーバコンピュータ、メインフレームコンピュータ、及び他のタイプのコンピュータを含む種々の形式で実装されてもよい。以下で説明するコンピューティングデバイス、及びそれらの接続、関係、及び機能を含むそのコンポーネントは、本明細書で説明する開示技術の実施形態の一例を意味し、当該実施形態を限定する意図はない。本開示の技術を実施するのに適切な他のコンピューティングデバイスは、異なる接続、関係及び機能を有するコンポーネントを含む異なるコンポーネントを含んでもよい。
【００２６】
＜基本的なコンピューティングデバイス＞
[0034]  次に、図1を参照して、本発明のいくつかの実施形態に従って、本開示の技術を実施するのに適した基本的なコンピューティングデバイス１００のブロック図について説明する。コンピューティングデバイス１００は、バス１０２又はメインメモリ１０６をアドレス解決し、かつ、コンピューティングデバイス１００の種々のコンポーネント間で及び種々のコンポーネントの中でデータを転送するための他の通信機構を含む。コンピューティングデバイス１００はまた、情報を処理するためのバス１０２と結合したハードウェアプロセッサ１０４を含む。ハードウェアプロセッサ１０４は、一般用途マイクロプロセッサ、システム・オン・チップ（ＳｏＣ）、又は説明した技術を実施するのに適した他のプロセッサであってもよい。
【００２７】
[0035]  ランダムアクセスメモリ（ＲＡＭ）又は他の動的ストレージデバイスなどのメインメモリ１０６は、情報やプロセッサ１０４によって実行される命令を格納するためにバス１０２に結合される。メインメモリ１０６はまた、プロセッサ１０４によって実行されるべき命令の実行中に一時変数又は他の中間情報を格納するために使用されてもよい。プロセッサ１０４へアクセス可能な一時的でない記憶媒体に格納される場合、そのような命令は、コンピュータデバイス１００が命令で特定される動作を実行するように、カスタマイズされた特定用途のコンピューティングデバイスへ変換する。
【００２８】
[0036]  コンピューティングデバイス１００はさらに、静的情報及びプロセッサ１０４への命令を格納するためにバス１０２に結合された読み取り専用メモリ（ＲＯＭ）１０８又は他の静的ストレージデバイスを含む。
【００２９】
[0037]  大容量ストレージデバイス１１０は、磁性式メモリ、光学式メモリ、半導体メモリ、光磁気メモリ、フラッシュメモリ、又は大容量ストレージ技術を利用可能な他のものなどの固定媒体若しくは取り外し可能な媒体に、情報及び命令を永続的に格納するためのバス１０２に結合される。大容量ストレージデバイスは、ネットワーク上で共有され、或いは、専用の大容量ストレージであってもよい。通常、大容量ストレージデバイス１１０（例えば、デバイスに対するメインハードディスク）は、オペレーティングシステム、ユーザアプリケーションプログラム、ドライバ、他のサポートファイル、及び全ての種類の他のデータファイルを含む、コンピュータデバイスの動作を方向付けるためのプログラム本体とデータを格納する。
【００３０】
[0038]  コンピューティングデバイス１００は、バス１０２を介して、情報をコンピュータユーザに表示するための液晶ディスプレイ（ＬＣＤ）又は他の電子的な視覚ディスプレイなどのディスプレイ１１２へ結合されうる。ディスプレイ１１２はまた、タッチジェスチャ（例えば、指又はスタイラス）入力をプロセッサ１０４へ通知するためのタッチ感知式のディスプレイであってもよい。
【００３１】
[0039]  アルファベットキー及び他のキーを含む入力デバイス１１４は、情報及びコマンドの選択をプロセッサ１０４へ通知するためのバス１０２へ結合される。
【００３２】
[0040]  ユーザ入力デバイスの他のタイプは、プロセッサ１０４へ方向情報やコマンドの選択を通知し、ディスプレイ１１２上でのカーソルの移動を制御するためのマウス、トラックボール、又はカーソル方向キーなどのカーソル制御部１１６である。当該入力デバイスは、通常、デバイスが平面上の位置を特定することを許容する第１軸（例えば、ｘ）と第２軸（例えば、ｙ）の二軸の２つの自由度を有する。
【００３３】
[0041]  コンピューティングデバイス１００は、カスタマイズされた配線論理、１以上の特定用途向け集積回路（ＡＳＩＣ）若しくは１以上のフィールドプログラマブルアレイ（ＦＰＧＡ）、ファームウェア、又は、コンピューティングデバイスと協働してコンピューティングデバイス１００を特定用途向けの機械とさせる若しくはプログラムするプログラム論理を用いて、ここで説明される方法を実行することができる。
【００３４】
[0042]  ここで説明する方法は、メインメモリ１０６に含まれる１以上の命令の１以上のシーケンスを実行するプロセッサ１０４に応じて、コンピューティングデバイス１００によって実行されてもよい。そのような命令は、ストレージデバイス１１０などの他の記憶媒体からメインメモリ１０６へと読み込まれてもよい。メインメモリ１０６に含まれる命令のシーケンスの実行は、プロセッサ１０４にここで説明する処理ステップを実行させる。代替的な実施形態において、配線回路は、ソフトウェア命令の代わりに、又は、組み合わせで使用され得る。
【００３５】
[0043]  ここで使用される用語“記憶媒体”は、コンピューティングデバイスを特定の様式で動作させるデータ及び命令の少なくとも１つを格納する非一時的な媒体として参照される。そのような記憶媒体は、不揮発性の媒体及び揮発性の媒体の少なくとも１つを備えてもよい。不揮発性媒体は、ストレージデバイス１１０などの、例えば、光学ディスク、磁性ディスク、又は半導体ドライバを含む。揮発性媒体はメインメモリ１０６などの動的メモリを含む。記憶媒体の共通の形式は、例えば、フロッピーディスク、フレキシブル・ディスク、ハードディスク、半導体ドライバ、磁性テープ若しくは任意の他の磁性データ記憶媒体、ＣＤ−ＲＯＭ、任意の他の光学データ記憶媒体、ホールのパターン（空孔）を複数有する任意の物理的な媒体、ＲＡＭ、ＰＲＯＭ及びＥＰＲＯＭ、フラッシュＥＰＲＯＭ、ＮＶＲＡＭ、任意の他のメモリチップ、又はカートリッジを含む。
【００３６】
[0044]  記憶媒体は、送信媒体とは区別されるものの、当該送信媒体と連結して使用されてもよい。送信媒体は、記憶媒体間で情報を転送することに使用されてもよい。例えば、送信媒体は、バス１０２を備える有線を含む同軸ケーブル、銅線、及び光ファイバーを含む。送信媒体はまた、電波及び赤外データ通信中に生成されるものなどの、音波又は光波の形式をとることもできる。
【００３７】
[0045]  媒体の種々の形態は、実行するプロセッサ１０４への１以上の命令の１以上のシーケンスを実行することに用いられてもよい。例えば、命令は、リモートコンピュータの磁性ディスク又は半導体ドライバ上でまず実行されうる。リモートコンピュータは、その動的メモリへ命令をロードし、モデムを用いて電話線を介して命令を送信することができる。コンピューティングデバイス１００のローカルなモデムは、電話回線でデータを受信し、データを赤外線信号に変換するための赤外線送信機を用いることができる。赤外線検出機は赤外線信号で運搬されたデータを受信することができ、適切な回路がそのデータをバス１０２に乗せる。バス１０２は、プロセッサ１０４が命令を読み出して実行するメインメモリ１０６にデータを運搬する。メインメモリ１０６によって受信される命令は、プロセッサ１０４によって実行される前又は実行された後の何れかにストレージデバイス１１０に選択的に格納されうる。
【００３８】
[0046]  コンピューティングデバイス１００はまた、バス１０２へ結合される通信インタフェース１１８を含む。通信インタフェース１１８は、ローカルネットワーク１２２（例えば、イーサネットネットワーク、無線ローカルエリアネットワーク、セルラー電話ネットワーク、Ｂｌｕｅｔｏｏｔｈ無線ネットワーク、又は同様のもの）へ接続された、有線又は無線のネットワークリンク１２０へ結合する２つの方法のデータ通信を提供する。通信インタフェース１１８は、種々のタイプの情報を表すデジタルデータストリームを伝達する電気信号、電磁信号、又は光信号を送受信する。例えば、通信インタフェース１１８は、有線のネットワークインタフェースカード、一体化された無線アンテナを有する無線ネットワークインタフェースカード、又はモデム（例えば、ＩＳＤＮ、ＤＳＬ、又はケーブルモデム）であってもよい。
【００３９】
[0047]  ネットワークリンク１２０は、通常、１以上のネットワークを通じて、他のデータデバイスへのデータ通信を提供する。例えば、ネットワークリンク１２０は、ホストコンピュータ１２４への、又は、インターネットサービスプロバイダ（ＩＳＰ）１２６によって操作されるデータ機器へのローカルネットワーク１２２を通じた接続を提供してもよい。ＩＳＰ１２６は順に、”Ｉｎｔｅｒｎｅｔ”１２８として通常参照されるワールド・ワイド・パケットデータ通信ネットワークを通じてデータ通信サービスを提供する。ローカルネットワーク１２２及びＩｎｔｅｒｎｅｔ１２８は、デジタルデータストリームを伝達する電気信号、磁性信号、又は光信号を使用する。コンピューティングデバイス１００への及びコンピューティングデバイス１００からのデジタルデータを伝達する、種々のネットワークを通じた信号、及び、ネットワークリンク１２０上の、及び通信インタフェース１１８を通じた信号は、送信媒体の例示の形式である。
【００４０】
[0048]  コンピューティングデバイス１００は、ローカルネットワーク１２２、インターネット１２８、ＩＳＰ１２６、ネットワークリンク１２０、及び通信インタフェース１１８を通じて、プログラムコードを含む、メッセージを送信し、データを受信することができる。インターネットの一例において、サーバコンピュータ１３０は、インターネット１２８、ＩＳＰ１２６、ローカルエリアネットワーク１２２、及び通信インタフェース１１８を通じて、アプリケーションプログラムに対して要求されるコードを送信するかもしれない。
【００４１】
[0049]  受信コードは、受信した際にプロセッサ１０４によって実行されてもよく、及び、後の実行のためにストレージデバイス１１０又は他の不揮発性のストレージに格納されてもよく、或いは、そのいずれもが行われてもよい。
【００４２】
＜基本的なソフトウェアシステム＞
[0050]  次に、図２を参照して、本発明のいくつかの実施形態に従って、コンピューティングデバイス１００の動作を制御するための基本的なソフトウェアシステム２００のブロック図について説明する。図示するように、コンピュータソフトウェアシステム２００は、コンピューティングデバイス１００の動作を方向付けるために提供される。システムメモリ（ＲＡＭ）１０６及び固定ストレージ（例えば、ハードディスク）１１０に格納されるソフトウェアシステム２００はカーネル又はオペレーティングシステム（ＯＳ）２１０を含む。ＯＳ２１０は、プロセス、メモリ配置、ファイル入力及び出力（Ｉ／Ｏ）、及びデバイスＩ／Ｏの実行を管理することを含む、コンピュータ動作のローレベルの態様を管理する。１以上のアプリケーションプログラム２０２（例えば、２０２Ａ、２０２Ｂ、202C・・・２０２Ｎ）は、システム２００による実行のために”ロードされ”うる（例えば、固定ストレージ１１０からメモリ１０６へ転送される）。いくつかの例において、アプリケーションプログラム２０２又はデバイス１００上での使用を意図した他のソフトウェアはまた、ダウンロード可能で、コンピュータで実行可能な命令のセットとして、例えば、インターネット上の記憶場所から（例えば、ウェブサーバから）ダウンロード及びインストールするために格納されうる。
【００４３】
[0051]  ソフトウェアシステム２００は、グラフィカルな（例えば、”ポイント・アンド・クリック”又は”タッチジェスチャ”）形式で、ユーザコマンド及びデータを受信するためのグラフィカルユーザインタフェース（ＧＵＩ）２１５を含んでもよい。これらの入力は順に、オペレーティングシステム２１０及びアプリケーションプログラム２０２の少なくとも１つからの命令に従ってシステム２００によって作動される。ＧＵＩ２１５はまた、ユーザが追加の入力を供給したり、又は、セッションを終了させたりする（例えば、ログオフする）とすぐに、ＯＳ２１０及びアプリケーションプログラム２０２からの動作結果を表示するように務める。
【００４４】
[0052]  ＯＳ２１０は、デバイス１００のベアハードウェア（例えば、プロセッサ１０４）上で直接的に実行することができる。代替的に、ハイパーバイザ又は仮想マシンモニタ（ＶＭＭ）２３０は、ベアハードウェア及びＯＳ２１０の間に割り込んで設けられてもよい。この構成において、ＶＭＭ２３０はデバイス１００のＯＳ２１０及びベアハードウェアの間のソフトウェア”クッション”又は仮想レイヤとして作動する。
【００４５】
[0053]  ＶＭＭ２３０が存在すれば、仮想マシンインスタンス（例えばゲストマシン）を作成して実行する。各ゲストマシンは、ＯＳ２１０などの”ゲスト”オペレーティングシステムと、ゲストオペレーティングシステム上で実行するように設計された、アプリケーションプログラム２０２などの１以上のアプリケーションプログラムを含む。ＶＭＭ２３０は、仮想オペレーティングプラットフォームを有するゲストオペレーティングシステムを提示し、ゲストオペレーティングシステムの実行を管理する。いくつかの例において、ＶＭＭ２３０は、デバイス１００のベアハードウェア上で直接実行されているかのように、ゲストオペレーティングシステムを実行することを許容してもよい。これらの例において、ベアハードウェア上で直接的に実行するように構成されたゲストオペレーティングシステムの同一のバージョンはまた、修正又は再構成なしにＶＭＭ２３０上で実行されうる。言い換えれば、ＶＭＭ２３０は、いくつかの例において、ゲストオペレーティングシステムへ完全なハードウェアと、ＣＰＵ仮想化を提供してもよい。他の例において、ゲストオペレーティングシステムは、効率的にＶＭＭ２３０上で実行されるように特別に設計されるか、又は、構成されてもよい。それらの例において、ゲストオペレーティングシステムは、仮想マシンモニタ上で実行する”気付かれるもの”であってもよい。言い換えれば、ＶＭＭ２３０は、いくつかの例において、ゲストオペレーティングシステムへ準仮想化を提供することができる。
【００４６】
[0054]  上述のコンピュータハードウェア及びソフトウェアは、本開示の技術を実施するために採用されうる基本的な下層のコンピュータコンポーネントを示す目的で提示される。しかしながら、本開示の技術は、任意の特定のコンピューティング環境又はコンピューティングデバイス構成に限定されない。代わりに、本開示の技術は、システムアーキテクチャ、又は、ここで詳細に提示した本開示の技術をサポートすることが可能な処理環境の任意のタイプで実装されてもよい。
【００４７】
＜クライアント／サーバ  マルチユーザ検索システムコンポーネント＞
[0055]  次に、図３を参照し、本発明のいくつかの実施形態に従って、クライアント／サーバシステム３００の基本ブロック図について説明する。クライアント／サーバシステム３００は、１以上のサーバ３２０を含む（ここではまとめて”マルチユーザ検索システム３２０”と称する。）。また、クライアント／サーバシステム３００は、ネットワーク３３０を介して１以上のサーバ３２５（ここではまとめて”サービングシステム３２５”と称する。）へ接続された１以上のクライアント３１０を含む。具体的には、クライアント３１０は、１以上のサーバ３２６（ここではまとめて”検索フロントエンド３２６”と称する。）へ接続された１以上のエンドユーザコンピューティングデバイス３１１を備える。例示の実施形態において、エンドユーザコンピューティングデバイス３１１は、MICROSOFT  WINDOWS（例えば、XP、VISTA、７、８等）、MAC  OS  X、LINUX（例えば、UBUNTU、FEDORA等）、IOS、ANDROID、BLACKBERRY  OS、及び同等のものなどの従来のオペレーティングシステムを実行する上述のコンピューティングデバイス１００などの複数のエンドユーザパーソナルコンピューティングデバイスをそれ自身に備えてもよい。
【００４８】
[0056]  例示の実施形態において前述したDROPBOXコンテンツ管理サービスの一部である、サービングシステム３２５及び１つ以上の他のサーバ３２１（ここでは、まとめて”ビルドシステム３２１”と称する。）は、一般的には、UNIX、LINUX及び同様のものなどのサーバオペレーティングシステムの下で実行する、１以上の独立したプロセス（例えば、独立した複数のクライアント）として動作する。ビルドシステム３２１は、トークン格納部３２４、インデクサーサーバ３２３（又は、単に”インデクサー３２３”）、及びトークナイザ３２２（又は、単に”トークナイザ３２２”）を含む。検索フロントエンド３２６に加えて、サービングシステム３２５はまた、クエリプロセッサ３２７及びドキュメントインデックス３２８を含む。
【００４９】
[0057]  ビルドシステム３２１のサーバ及びサービングシステム３２５のサーバを含むマルチユーザ検索システム３２０のサーバは、サーバコンピュータ（例えば、図１のコンピューティングデバイス１００）として、又は手近な特定の実施形態の要求に依存した仮想マシンインスタンスとして実現されてもよい。マルチユーザ検索システム３２０のサーバが仮想マシンインスタンスとして実現される場合には、”仮想”サーバをホストする（実行する）下層のサーバコンピュータであってもよい。しかしながら、仮想サーバとサーバコンピュータとの間において一対一で対応する必要性はない。例えば、サーバコンピュータは複数の仮想サーバをホストすることができる。
【００５０】
[0058]  本明細書及び添付の特許請求の範囲で使用される場合、”サーバ（server）”の単数形は、別段の明確な示唆がない限り、複数形を含むことも意図している。例えば、マルチユーザ検索システム３２０の”サーバ”は、実際には、手近な特定の実施形態の要件に従った、平衡性、フェイルオーバー、冗長性、高可用性、及び他の目的の少なくとも１つのための、互いのミラー又は複製である複数のサーバによって実現されてもよい。
【００５１】
[0059]  動作中において、クライアント３１０は、検索クエリ３３２を検索フロントエンド３２６へ送信し、検索フロントエンド３２６からクエリ回答３３４を受信する。クエリ３３２は、ネットワーク要求で検索フロントエンド３２６において受信されてもよく、当該回答３３４はネットワーク要求へのネットワーク応答で検索フロントエンド３２６から送信されてもよい。ネットワーク要求及びネットワーク応答は、ネットワークデータパケットでネットワーク３３０上で受信／送信されてもよい。本発明のいくつかの実施形態において、ネットワークデータパケットは、インターネットプロトコル（IP）に従ってフォーマットされる。ネットワーク要求及びネットワーク応答はまた、アプリケーションレイヤのネットワークプロトコルに従って受信／送信されてもよい。いくつかの実施形態において、アプリケーションレイヤのネットワークプロトコルは、ハイパーテキスト転送プロトコル（HTTP）又はセキュアハイパーテキスト転送プロトコル（HTTPS）である。例えば、クエリ３３２は、１以上のHTTP又はHTTPS要求で受信されてもよく、回答３３４は１以上のHTTP又はHTTP応答で送信されてもよい。
【００５２】
[0060]  ネットワーク３３０は、例えば、セルラー電話ネットワーク、ローカルエリアネットワーク（LAN）、ワイドエリアネットワーク（WAN）、インターネット及び同様のものなどの多くの従来の有線又は無線ネットワークシステムを含んでもよい。サービングシステム３２５、ビルドシステム３２１、及びそれらのサーバはまた、１以上のIPネットワーク及び他の適切な種別のデータ通信ネットワークによって相互に接続されてもよく、HTTP、HTTPS、及び他の適切なアプリケーションレイヤプロトコルの少なくとも１つを用いて互いに通信してもよい。
【００５３】
[0061]  検索クエリ３３２は検索式を含んでもよい。検索式の構文は、１以上のブール演算子（例えば、AND、OR、NOTなど）によって共に関連付けが可能な、１以上の検索トークンのシーケンスを含んでもよい。トークンは、１以上の文字の文字列として定義されてもよい。トークンの文字は、従来の文字符号化手法（例えば、ASCII、UTF-８、及び同等のもの）に従って符号化されてもよい。
【００５４】
[0062]  クエリのトークンは、検索クエリ３３２に現れるトークンとして定義されてもよい。例えば、単一の結合クエリ３３２が［baguette fromage］（囲い括弧（enclosing brackets）なしで）の場合を検討する。当該クエリ３３２を満足するドキュメント３４０は、トークン“baguette”と、トークン“fromage”との両方を含んでもよく、ドキュメント３４０の中で互いが隣接する必要はなく、かつドキュメント３４０の中でトークン“fromage”の前にトークン“baguette”が現れる必要性はない。しかしながら、トークン“baguette”と、トークン“fromage”とを互いに近くに含むか関連付けられ、トークン“fromage”の前にトークン“baguette”を含むか関連付けられるドキュメント340は、クエリ３３２を満足する他のドキュメント340よりも関連があるものとみなされてもよい。
【００５５】
[0063]  検索フロントエンド３２６からクライアント（例えば、エンドユーザコンピューティングデバイス３１１Ａ）へ返される検索クエリ３３２に対するクエリ回答３３４は、関連性で順序づけられた検索回答の概要のリストを含んでもよい。それぞれのそのような概要は、検索クエリ３３２を満足するドキュメントインデックス３２８においてクエリプロセッサ３２７によって識別されたドキュメント３４０に対応してもよい。検索回答の概要は、例えば、対応するドキュメントの識別子（例えば、名称、タイトルなど）、対応するドキュメントの短い説明（例えば、概要、要約、抽出、抜粋など）、ダウンロード、閲覧又は対応するドキュメントへのいくつかの他のユーザアクションを行うためのインタラクティブなハイパーリンク（例えば、ユニフォーム・リソース・ロケータ（URL））、及び、対応するドキュメント３４０について可能な他の有用な情報（例えば、対応するドキュメントのサムネイル画像）を含んでもよい。概要のリストは、エンドユーザのコンピューティングデバイスのユーザへ、エンドユーザのコンピューティングデバイス上で実行するウェブブラウザアプリケーションのウェブページ上で、又は、例えばエンドユーザコンピューティングデバイス上で実行するアプリケーション（例えば、モバイルアプリケーション）のその他のグラフィカルユーザインタフェースで、提示されてもよい。
【００５６】
[0064]  検索フロントエンド３２６で受信される検索クエリ３３２は、クエリプロセッサ３２７によって処理されてもよい。クエリプロセッサ３２７は、検索クエリ３３２を満足するドキュメントを特定するためにドキュメントインデックス３２８を調べてもよい。検索クエリ３３２を満足するクエリプロセッサ３２７によって特定されるドキュメントへの参照（例えば、ハイパーリンク）は回答３３４で返されてもよい。以下では、クエリ３３２を処理するためのクエリプロセッサ３２７によって実行される本発明のいくつかの実施形態における技術をより詳細に説明する。
【００５７】
[0065]  いくつかのケースにおいて、検索クエリ３３２は”コンプリーション（completion）”検索クエリ３３２である。コンプリーション検索クエリ３３２は、コンプリートしていないトークンを含む一連の１以上のクエリトークンを含む検索クエリ３３２として定義されうる。例えば、コンプリーション検索クエリ３３２は、エンドユーザコンピューティングデバイスのユーザがコンプリーション検索クエリ３３２のクエリトークンの１つを入力する（例えば、タイピングによって）過程にある（処理中の）場合に、エンドユーザコンピューティングデバイス（例えば、３１１Ａ）から検索フロントエンド３２６へ提示されてもよい。この場合、コンプリーションクエリ３３２への回答３３４は、クエリプロセッサ３２７がコンプリーションクエリ３３２に基づいてドキュメントインデックス３２８を定義するコンプリーション検索クエリ３３２に対する可能なコンプリーション要素のリストを含んでもよい。
【００５８】
[0066]  コンプリートしたコンプリーションクエリ３３２のクエリトークンは、”コンプリートトークン（complete tokens）”と称する。コンプリートしていないコンプリーションクエリ３３２のクエリトークンは、”コンプリーショントークン（completion tokens）”と称する。このように、コンプリーションクエリはまた、コンプリーショントークンを含むクエリ３３２として定義されてもよい。
【００５９】
[0067]  コンプリーションクエリ３３２は、単に単一の文字又は一文字より多くの文字を含んでもよい。例えば、コンプリーションクエリ３３２［ｐ］（囲い括弧なし）では、コンプリートトークンは存在せず、トークン”ｐ”はコンプリーショントークンとなりうる。コンプリーションクエリ３３２は、代わりに、１以上のコンプリートトークンを含んでもよい。例えば、コンプリーションクエリ３３２［ｐｒｉｖａｔｅ  ｓｅ］（囲い括弧なし）では、トークン”ｐｒｉｖａｔｅ”がコンプリートトークンであり、トークン”ｓｅ”はコンプリーショントークンとなりうる。
【００６０】
[0068]  典型的には、コンプリーションクエリ３３２の一連のトークン（又は、列の中にただ一つのトークンがある場合には唯一のトークン）の最後のトークンはコンプリーショントークンである。大抵の場合、これは、ユーザが列に現れるのと同じ順序でコンプリーションクエリ３３２のトークンを入力するためである。しかしながら、コンプリーションクエリ３３２の最後のトークンよりも前のトークンがコンプリーショントークンであってもよい。例えば、ユーザは前回入力されたトークンを編集するために彼らのエンドユーザコンピューティングデバイス（例えば、３１１Ａ）において入力カーソルを動かしてもよい。例えば、ユーザは、最初にクエリ３３２［solved two problems］（囲い括弧なし）を入力してもよい。その後、ユーザは、コンプリーションクエリ［solved th probrems］を生成するために、トークン”two”を”th”で置き換えるように入力カーソルを動かしてもよい。本例示のコンプリーションクエリ３３２において、第１のトークン”solved”と最後のトークン”problems”とは、コンプリートトークンであってもよく、第２のトークン”th”はコンプリーショントークンであってもよい。
【００６１】
[0069]  本発明のいくつかの実施形態において、クエリ３３２は、クエリ３３２を含むネットワーク要求において、コンプリーションクエリ３３２として指定される。例えば、ネットワーク要求は、クエリ３３２のクエリトークンがコンプリーショントークンであることを示してもよい。コンプリーショントークンの指標は、ユーザのエンドユーザコンピューティングデバイス（例えば、３１１Ａ）において実行するソフトウェアによって作成されてもよい。例えば、ソフトウェアは、ユーザがユーザのエンドユーザコンピューティングデバイスで提示される検索ユーザインタフェースへ（例えば、物理的なキーボード、又はソフトウェアキーボードで）クエリ３３２のトークンの文字を入力している際に、フロントエンド３２６を検索するクエリ３３２を含むネットワーク要求を送信してもよい。そうすることで、ソフトウェアは、ユーザが入力しているトークンがコンプリーショントークンであることをネットワーク要求（例えば、メタデータ）においてフラグで示すか、印を付けるか、特定するか、さもなければ、示してもよい。本発明のいくつかの実施形態において、ユーザのエンドユーザコンピューティングデバイスで実行するソフトウェアはJAVASCRIPTソフトウェア又は他のウェブブラウザクライアント側のスクリプト言語ソフトウェアであり、検索ユーザインタフェースはユーザのウェブブラウザのウィンドウに表示されるウェブページ上に提示されてもよい。本発明のいくつかの実施形態において、ユーザのエンドユーザコンピューティングデバイスで実行するソフトウェアは、モバイルアプリケーション、又は、ユーザのエンドユーザコンピューティングデバイスにおいて検索ユーザインタフェースを駆動する他の専用のソフトウェアアプリケーションである。
【００６２】
[0070]  コンプリーション検索クエリ３３２に対する可能性のあるコンプリーションは、ドキュメントインデックス３２８によってインデックスが付与された少なくとも１つのドキュメント３４０によって満足され、かつ、コンプリーションクエリ３３２をコンプリートする検索クエリ３３２として定義されてもよい。例えば、ドキュメントインデックス３２８によってインデックスが付与された少なくとも１つのドキュメント３４０によって満足される検索クエリ３３２［solved two problems］（囲い括弧なし）は、コンプリーション検索クエリ３３２［solved two prob］（囲い括弧なし）への可能性のあるコンプリーションであってもよい。コンプリーションクエリ３３２への可能なコンプリーションのリストは、コンプリーションクエリ３３２を満足するドキュメント３４０の検索回答の概要のリストへの追加として、又は、その代わりに、回答３３４で提示されてもよい。以下では、コンプリーションクエリ３３２を処理するためのクエリプロセッサ３２７によって採用される本発明のいくつかの実施形態における技術をより詳細に説明する。
【００６３】
[0071]  コンプリーションクエリ３３２でないクエリ３３２は、時には、当該クエリ３３２をコンプリーションクエリ３３２から区別するために、”非コンプリーション（non-completion）”クエリ３３２として参照されてもよい。非コンプリーションクエリ３３２はまた、コンプリートトークンのみを含み、任意のコンプリーショントークンを含まないクエリ３３２として定義されてもよい。通常、クエリ３３２と称する場合、参照は、ここでは前述した”コンプリーション”又は”非コンプリーション”の限定詞なしで、”クエリ３３２”又は”検索クエリ３３２”として参照されてもよい。文中で明確に言及しない限り、クエリ３３２に関連するここでの説明は、通常、コンプリーションクエリ３３２及び非コンプリーションクエリ３３２の両方に関連する。
【００６４】
[0072]  ドキュメント３４０は、テキストコンテンツを含むデジタル情報（例えば、文字データ）、及びテキストコンテンツに関連付けられるデジタル情報（例えば、テキストメタデータ）の少なくとも１つのデジタル情報の収集物として定義されてもよい。いくつかの例示では、ワード処理ドキュメント３４０は、大抵の場合、テキストコンテキスト（例えば、ドキュメントの作成者による単語及び文章）を含み、スプレッドシートのドキュメント３４０は、単語及び数字の形式でのテキストコンテキストを含んでもよく、デジタル画像ドキュメント３４０（例えば、デジタル写真）は、そのヘッダ（例えば、交換可能な画像ファイル形式（Ｅｘｉｆ））にテキストコンテンツを含んでもよい。追加的に又は代替的に、デジタル画像ドキュメント３４０は、画像コンテンツのテキストメタデータのタグ又は他のテキスト記述の形式でテキストコンテンツと関連付けられてもよい。それらは、単にドキュメントの可能ないくつかの例示であり、他の種別のドキュメントも本発明の範囲内にある。
【００６５】
[0073]  いくつかの例で、ドキュメント３４０は、ファイルタイプを有するファイルに対応する。ドキュメントとなりうるいくつかのファイルタイプは、限定はしないが、画像ファイル（例えば、．ｊｐｇ、．ｔｉｆｆ、．ｇｉｆｆ）、音楽ファイル（例えば、．ｍｐ３、．ａｉｆｆ、．ｍ４ａ、．ｗａｖ）、動画ファイル（例えば、．ｍｏｖ、．ｍｐ４、．ｍ４ｖ）、ワード処理ファイル（例えば、．ｄｏｃ、．ｄｏｃｘ、．ｐａｇｅｓ）、プレゼンテーションファイル（例えば、．ｐｐｔ、．ｐｐｔｘ、．ｋｅｙ）、スプレッドシートファイル（例えば、．ｘｌｓ、．ｘｌｓｘ、．ｎｕｍｂｅｒｓ）、ウェブページファイル（例えば、．ｈｔｍ、．ｈｔｍｌ）、テキストファイル（例えば、．ｔｘｔ）、及び、テキストを含む及び／又はテキストに関連する任意の他のタイプのファイルを含む。
【００６６】
[0074]  ドキュメント３４０は、ドキュメントの内容を記述するテキスト内容に関連付けられうる。当該関連付けられたテキスト内容は、ドキュメントについての”テキストメタデータ”として時には参照される。例えば、ドキュメント３４０のファイル名は、ドキュメント３４０についてのテキストメタデータでありうる。他の例として、デジタル画像ドキュメントのテキストメタデータは、画像のコンピュータ解析（例えば、光学文字認識（ＯＣＲ）又は顔認識アルゴリズム等）によって作製されてもよい。ドキュメント３４０についてのテキストメタデータの他の形式は、例えば、ドキュメント３４０を参照する（例えば、ハイパーリンクによって）、ドキュメント３４０について言及する（例えば、ソーシャルネットワークへのポストにおいて）、又は、ドキュメント３４０を議論する（例えば、ブログポスト及び／又はユーザコメントのポストにおいて）、ウェブページから取得したドキュメント３４０についてのテキスト内容を含みうる。本説明の目的で、ドキュメント３４０についてのテキストメタデータは、ドキュメント３４０のテキスト内容の一部であり、かつ、ドキュメント３４０のテキスト内容に含まれる（現れる）ように考慮されてもよい。
【００６７】
[0075]  ドキュメント３４０はまた、現在のバージョンとみなされるものを含む複数のバージョンを有してもよい。例えば、ユーザは、ワード処理プログラムを用いてワード処理ドキュメント３４０の第１のバージョンを作成し保存してもよい。その後、ユーザは、ドキュメント３４０の第１のバージョンを修正してもよく、当該修正を含むドキュメント３４０の第２のバージョンを保存してもよい。代替的には、ドキュメント３４０はまた、現在のバージョンとみなされる時間でのただ一つのバージョンを有してもよい。
【００６８】
[0076]  ドキュメントインデックス３２８は、１以上の辞書及び登録（posting）のペアを含んでもよい。辞書のペアは、インデックストークンを格納してもよく、また、各インデックストークンについての登録のペアにおける登録リストへのポインタを含んでもよい。例えば、ポインタは、登録リストが格納される、揮発性又は不揮発性メモリの位置のアドレスであってもよい。
【００６９】
[0077]  インデックストークンは、ドキュメントインデックス３２８においてドキュメント３４０がインデックス化されているトークンとして定義されてもよい。インデックストークンに加えて、辞書は、例えばトークンのドキュメントでの頻度などのインデックストークンについてのトークン属性を格納してもよい。インデックストークンについてのトークン属性は、クエリ処理効率及び検索結果ランキングを改善するためにクエリプロセッサ３２７によって使用されてもよい。
【００７０】
[0078]  インデックストークンについての登録リストは、トークンが現れる１以上のドキュメント３４０の１以上のドキュメント識別子のリストを格納してもよく、また、例えばドキュメント３４０でのトークンの頻度、又はドキュメント３４０内のトークンの位置などの登録リストに特定されたドキュメント３４０についてのドキュメントトークン属性を格納してもよい。登録リストのドキュメント３４０についてのドキュメントトークン属性はまた、クエリ処理効率及び検索結果ランキングを改善するためにクエリプロセッサ３２７によって使用されてもよい。
【００７１】
[0079]  クエリ３３２を処理する際に、クエリプロセッサ３２７は、クエリ３３２のクエリトークンに基づいて、ドキュメントインデックス３２８の辞書内のインデックストークンを探してもよい。例えば、［solved two problems］（囲い括弧なし）などのクエリ３３２について、クエリプロセッサ３２７は、辞書内のインデックストークン”solved”、”two”、及び”problems”を探してもよい。クエリプロセッサ３２７は、辞書内で探されたインデックストークンに関連付けられるポインタを用いて探されたインデックストークンについての登録リストを取り出してもよい。例えば、クエリプロセッサ３２７は、インデックストークン”solved”、”two”、及び”problems”についての辞書の登録リストに関連付けられるドキュメントインデックス３２８の登録から取り出してもよい（例えば、RAMへロードしてもよい）。
【００７２】
[0080]  クエリプロセッサ３２７は、クエリ３３２を満足するドキュメント３４０を特定するためにマージアルゴリズムを用いて取り出した登録リストをマージしてもよい。例えば、インデックストークン”solved”について取り出された登録リストがドキュメントＤ２及びＤ３を特定し、インデックストークン”two”について取り出された登録リストがドキュメントＤ２を特定し、インデックストークン”problems”について取り出された登録リストがドキュメントＤ２及びＤ３を特定することを想定する。従って、クエリプロセッサ３２７は、探し出したインデックストークンの全てを含むドキュメントＤ２を特定するために、マージアルゴリズムに従って、それら３つの登録リストをマージしてもよい。種々の異なるマージアルゴリズムは、登録リストをマージするために使用されてもよく、本発明は任意の特定のマージアルゴリズムに限定されない。例えば、マージアルゴリズムは、複数の登録リストのそれぞれを通じて複数のポインタを交互に進めることによって複数のポインティングリストを組み合わせてもよい。
【００７３】
[0081]  クエリプロセッサ３２７は、ただ単一の結合クエリ３３２を処理することに限定されず、クエリプロセッサ３２７は、より複合的なクエリ３３２を処理してもよい。例えば、クエリプロセッサ３２７は、以下で例示のタイプのクエリ３３２、クエリA：［(two or three )NOT problems］、クエリB：［two three problems］、クエリC：［(two three) problems］、及びクエリD［(two OR three) (problems OR solutions)］を処理してもよい。囲い括弧［］内の前述の例示のクエリ３３２のそれぞれにおいて、囲い括弧［］はクエリの一部ではない。クエリAはクエリ３３２［(two or three) AND NOT problems］と同等であり、クエリBはブールクエリ３３２［two AND three AND problems］と同等であり、クエリCはブールクエリ３３２  [(two AND three) AND problems]と同等であり、クエリDはブールクエリ３３２  [(two OR three) AND (problems OR solutions)]と同等である。前述の例示のクエリ３３２において、AND OR NOT ()はブール演算子である。
【００７４】
[0082]  いくつかの実施形態において、ドキュメントインデックス３２８は、インデックスサーバのそれぞれがドキュメントインデックス３２８の部分（例えば、共有部分）を格納するサービングシステム３２５の複数のインデックスサーバに渡って水平分割される（例えば、共有される）。種々の異なる技術が複数のインデックスサーバに渡ってインデックス３２８を水平分割する（共有する）ために使用されてもよい。本発明のいくつかの実施形態において、ドキュメントインデックス３２８は、”ドキュメンネームスペース”によって共有される。
【００７５】
[0083]  ドキュメントネームスペースは、共有アクセス制御の下で、１以上のドキュメント３４０の収集物として定義されてもよい。共有アクセス制御は、ユーザ及びユーザグループの少なくとも１つのいずれがドキュメント３４０へのアクセスを有するかと、ユーザ及びユーザグループの少なくとも１つがドキュメントネームスペースに属するドキュメント３４０上にどんなアクセス（例えば、読み出しアクセス、書込みアクセス、共有アクセス、プレビューアクセス、ダウンロードアクセスなど）を有するかと、を特定する及び／又は示す、明示的な許可及び暗黙的な許可の少なくとも１つに基づくことができる。明示的な許可は、ユーザ及びユーザグループの少なくとも１つのいずれがドキュメント３４０へのアクセスを有するかと、ユーザ及びユーザグループの少なくとも１つがドキュメントネームスペースのドキュメント３４０上にどんなアクセスを有するかと、を特定する及び／又は示す、例えばドキュメントネームスペース（又は、それらの識別子）に関連付けられる1以上のアクセス制御リスト（ACL）及び他のデータの少なくとも１つの形式で行ってもよい。暗黙的な許可の一例は、ユーザが当該ユーザのユーザアカウント（又は、それらの識別子）に関連付けられるドキュメントネームスペースの全てのドキュメント３４０へのアクセスを有するものである。
【００７６】
[0084]  例示の実施形態において、ドキュメントネームスペースは、例えば、前述したDROPBOXコンテンツ管理サービスなどのクラウドデータストレージサービスで保持されるユーザのアカウントに関連付けられるドキュメント３４０を含む。アカウントに対する認証が成功すると（例えば、有効なユーザ名／パスワード）、ユーザは、ユーザのアカウントと関連付けられるドキュメントネームスペースにおいてドキュメント３４０へのアクセスを暗黙的に有する。
【００７７】
[0085]  例示の実施形態において、ドキュメントネームスペースは、例えば前述したDROPBOXコンテンツ管理サービスなどのオンラインデータストレージサービスで保持される複数のユーザアカウントの中で共有される１以上のドキュメント３４０の収集物に属しているドキュメント３４０を含む。いくつかの例で、ドキュメントの収集物は、”共有フォルダ”と称してもよい。ドキュメントの収集物が共有されるアカウントに対する認証が成功すると、ユーザは、共有されるドキュメントネームスペースにおけるドキュメントへのアクセスを有する。
【００７８】
[0086]  ドキュメントインデックス３２８がドキュメントネームスペースによって共有される本発明のいくつかの実施形態によれば、サービングシステム３２５の複数のインデックスサーバのそれぞれは、１以上のドキュメントネームスペースに属しているドキュメント３４０にインデックスを付与する。本発明のいくつかの実施形態において、ドキュメントネームスペースの識別子は、ドキュメントネームスペース内のドキュメント３４０をインデックス化するインデックスサーバを決定するために、共有キーとして使用される。限定しない例示の実施形態において、ドキュメントインデックス３２８は、４億（４００，０００，０００）を超えるドキュメントネームスペース内のドキュメントにインデックスを付与する。
【００７９】
[0087]  ドキュメント３４０は、ビルドシステム３２１によって処理することが可能に提供されるか若しくは可能にされる任意のドキュメント３４０、又は、ドキュメントインデックス３２８でインデックスが付与される任意のドキュメント３４０を含んでもよい。ビルドシステム３２１は、ドキュメント３４０からドキュメントインデックス３２８のインデックスデータベースファイル３５１を構築する。ビルドシステム３２１はまた、ドキュメント３４０からドキュメントインデックス３２８へのインデックス変形３５２を生成する。
【００８０】
[0088]  インデックスデータベースファイル３５１は、１以上のドキュメント３４０に共にインデックスを付与する辞書及び登録のペアを含んでもよい。より一般的には、インデックスデータベースファイル３５１内のデータは、キーが辞書のインデックストークンに対応し、かつ、その値が登録の登録リストに対応する、キーバリューペア（key-value pair）の集合（例えば、連想配列）として構成されてもよい。本発明のいくつかの実施形態において、インデックスデータベースファイル３５１は、１つのドキュメントネームスペースにおいてドキュメント３４０にインデックスを付与する。本発明のいくつかの実施形態において、ドキュメントのインデックス３２８のインデックスデータベースファイル３５１の数を低減するために、インデックスデータベースファイル３５１は、複数のドキュメントネームスペースにおいてドキュメント３４０にインデックスを付与する。インデックスデータベースファイル３５１によってインデックスが付与された複数のドキュメントネームスペースは、時には、ここでドキュメントネームスペースの”ドキュメントネームスペースのグループ”として参照される。
【００８１】
[0089]  ビルドシステム３２１によるドキュメントインデックス３２８のインデックスデータベースファイル３５１を構築することは、ドキュメント３４０をトークン化することによって複数トークンのセットを生成し、トークン格納部３２４に生成した複数トークンのセットを格納するトークナイザ３２２に関与してもよい。その後、インデクサー３２３は、生成した複数トークンのセットに基づいてインデックスデータベースファイル３５１を生成してもよい。インデクサー３２３は、生成したインデックスデータベースファイル３５１を、ドキュメントインデックス３２８の一部として、サービングシステム３２５のインデックスサーバへの格納のために、サービングシステム３２５へ提供する。
【００８２】
[0090]  ビルドシステム３２１によってドキュメント３４０からドキュメントインデックス３２８へのインデックス変形３５２を生成することは、最近作成された又は最近修正されたドキュメント３４０からの複数トークンのセットを生成した後に、インデクサー３２３に通知するトークナイザ３２２に関与してもよい。例えば、ドキュメント３４０は、エンドユーザコンピューティングデバイス３１１のユーザによって最近作成された又は最近修正されたものであってもよい。最近作成したドキュメント３４０の通知、或いは、修正したドキュメント３４０の通知が行われると、インデクサー３２３は、トークン格納部３２４に当該ドキュメントについて格納された１以上の複数トークンのセットに基づいて、ドキュメントについてのインデックス変形３５２を生成する。例えば、ドキュメントが修正される場合などのいくつかの例において、生成したインデックス変形３５２は、修正したドキュメントについて生成した複数トークンのセットと、以前のバージョンのドキュメントについて生成した複数トークンのセットとの間の差異を反映する。生成したインデックス変形３５２は、その後ドキュメントインデックス３２８にそれを適用するサービングシステム３２５へ提供されてもよい。
【００８３】
[0091]  トークナイザ３２２は、ドキュメント３４０のテキスト内容をトークン化することによって複数トークンのセットを作製する。ドキュメントのテキスト内容をトークン化することは、ドキュメントの文字列を取得することを含んでもよい。種々の技術がドキュメントデータの形式に従って、ドキュメントの文字列を取得するトークナイザ３２２によって使用されてもよい。例えば、技術又は使用される当該技術は、ドキュメントの文字符号化手法（例えば、ASCII、Unicode、UTF-8、マイクロソフトWORD、ADOBE、PDFなど）に従ってドキュメントを復号することと、ドキュメントが圧縮されているかどうか（例えば、ZIP圧縮によって）に従ってドキュメントを解凍することとの少なくとも１つを含んでもよい。
【００８４】
[0092]  ドキュメントの文字列が取得されるとすぐに、トークナイザ３２２は、同時にトークン上で言語プロセスを実行することが可能なように、文字列を、複数の小片、いわゆるトークンに分割する。言語プロセスは、例えば、所定の文字列（例えば、句読点）を無視することと、共通の単語（例えば、ストップワード）を除外することと、並びに、語幹解釈及び見出語解釈を行うこととの少なくとも１つを含んでもよい。言語プロセスはまた、付加記号、アクセント及び大文字化／大文字変換の少なくとも１つなどを取り除くことを含むトークンの正規化を含んでもよい。
【００８５】
[0093]  トークナイザ３２２がドキュメントについての複数トークンのセットを生成した後に、トークナイザ３２２は、トークン格納部３２４に複数トークンのセットを格納する。例えばトークナイザ３２２がインデクサー３２３へ最近作成したドキュメント３４０を通知するか、或いは、インデクサー３２３へ最近修正されたドキュメント３４０を通知する場合などのいくつかの例において、トークナイザ３２２はまた、複数トークンのセットをインデクサー３２３へ提供してもよい。
【００８６】
[0094]  トークン格納部３２４は、トークナイザ３２２によって複数のドキュメント３４０について生成された複数トークンのセットを格納する。例えば、所定バージョンのドキュメント３４０に関して、トークン格納部３２４は、当該ドキュメントバージョンについてトークナイザ３２２によって生成された複数トークンのセットを格納してもよい。
【００８７】
[0095]  本発明のいくつかの実施形態において、トークン格納部３２４は、例えば、APACHE  HBASEデータベースシステムなどのカラム指向型の分散データベースシステムを含む。しかしながら、データベースシステムの他のタイプが、それぞれにおける特定の実装の要件に従って、他の実施形態に使用されてもよい。例えば、独自の、関係型、又は、独立型のデータベースシステムが、オープンソース、カラム指向型又は分散型のものの代わりに使用されてもよい。
【００８８】
[0096]  上記例示のクライアントサーバのマルチユーザ検索システム３２０を考慮すると、サービングシステム３２５及びクエリ３３２を処理し、個別の回答３３４をそれらへ返すために使用されるそれらのコンポーネントについて以下で詳細に説明する。
【００８９】
＜サービングシステムの構成要素＞
[0097]  次に、図４を参照して、本発明のいくつかの実施形態に従う、サービングシステム３２５のより詳細を示すブロック図について説明する。サービングシステム３２５は１つ以上のサーバ３２６（以下、まとめて”フロントエンドサーバ３２６”として参照する）と、１つ以上のサーバ４１０（以下、まとめて”アクセス制御サーバ４１０”として参照する）と、クエリプロセッサ３２７とを含む。
【００９０】
[0098]  クエリプロセッサ３２７は、（１）ドキュメントインデックス３２８の格納と、ドキュメントインデックス３２８のインデックスシャード（index shard）（例えば３２８Ａ、３２８Ｂ、３２８Ｃ．．．３２８Ｎ）に対するクエリ３３２の処理とに対して責任をもつ１つ以上のサーバ４３０（まとめて”インデックスサーバ４３０”として参照される）と、（２）クエリ３３２と関連付けられたドキュメントネームスペース識別子に基づいて、フロントエンドサーバ３２６から適切なインデックスサーバ４３０へのクエリ３３２のルーティングと、インデックスサーバ４３０から返答される回答４１８を、その後フロントエンドサーバ３２６に、そして最後にエンドユーザコンピューティングデバイス３１１に返答される回答３３４に統合すること、に対する責任をもつ１つ以上のサーバ４３０（まとめて”ルーティングサーバ４２０”として参照される）、との２つのレベルのサーバにわたって分散される。
【００９１】
[0099]  ドキュメントインデックス３２８の各インデックスシャード（例えば、３２８Ａ、３２８Ｂ、３２８Ｃ...３２８Ｎ）は、対応するインデックスサーバ（例えば、４３０Ａ、４３０Ｂ、４３０Ｃ．．．４３０Ｎ）において格納されうる。インデックスサーバ（４３０Ｂ）におけるインデックスシャード（例えば３２８Ｂ）は、当該インデックスシャードに割り当てられた１つ以上のドキュメントネームスペース内の、インデックスドキュメント３４０でありうる。
【００９２】
[0100]  動作において、フロントエンドサーバ３２６Ａは、エンドユーザコンピューティングデバイス（例えば３１１Ａ）から検索クエリ３３２Ａを受信して、個別化された回答３３４Ａをエンドユーザコンピューティングデバイスに返答する。回答３３４Ａは、クエリ３３２Ａに関連するものとして回答３３４で特定されたドキュメント３４０が、ユーザがアクセスを認証されたドキュメントネームスペースに属すドキュメント３４０にのみ限定されうるという意味において個別化されうる。クエリ３３２Ａがコンプリーションクエリ（completion query）である場合、回答３３４Ａはまた、回答３３４に含まれるコンプリーションクエリにあり得るコンプリーション要素が、ユーザがアクセスを認証されたドキュメントネームスペースに属すインデックスドキュメント３４０のドキュメントインデックス３２８におけるインデックストークンのみから構成されうるという意味において個別化されうる。ユーザは、認証されて、回答３３４Ａの個別化を促進しうる。
【００９３】
[0101]  例えば、クエリ３３２Ａは、認証されたユーザに対して確立された認証セッションのコンテキストにおいて、フロントエンドサーチ３２６Ａで受信されうる。例えば、認証されたユーザは、クエリ３３２Ａをフロントエンドサーバ３２６Ａに送信するエンドユーザコンピューティングデバイスのユーザでありうる。認証されたユーザは、フロントエンドサーバ３２６Ａがクエリ３３２Ａを受信する前に認証されうる。例えば、認証されたユーザは、認証クレデンシャル（例えばユーザ名／パスワードのペア）を含んだ、エンドユーザコンピューティングデバイスからの認証ネットワーク要求を受信したことに応答して認証されうる。認証ネットワーク要求を受信したことに応じて、当該ネットワーク要求内のパスワードが当該ユーザ名に対する既知のパスワードと比較されうる。パスワードが一致した場合には認証セッションが確立する。そうではなくパスワードが一致しない場合、認証セッションは確立しない。
【００９４】
[0102]  ユーザ名／パスワードのペア以外の認証クレデンシャルがユーザを認証するために用いられうる。例えば、ある例では、ユーザはマルチファクタ（multi-factor）認証技術に従って認証されうる。例えば、ユーザの知っている何か（例えばユーザ名／パスワード）に加えて、ユーザはユーザの所有する何か（例えばＦＯＢ又は携帯電話機）及びユーザ自身である何か（生体測定値）の少なくともいずれかに基づきうる。ある例では、ユーザがパスワードを提供しない認証プロトコルに従って認証されうる。この目的に適した認証プロトコルのいくつかの例は、オーオース（Open Authorization）（OAuth)、オープンＩｄ（OpenId）及びセキュリティアサーションマークアップ言語（Security Assertion Markup Language）（ＳＡＭＬ）認証プロトコルを含む。
【００９５】
[0103]  いくつかの例では、ユーザはフロントエンドサーバ３２６Ａがクエリ３３２Ａを受信する前に認証されるのに対し、他の実施形態では、ユーザはクエリ３３２Ａを受信することに応じて認証される。例えば、クエリ３３２Ａを含むネットワーク要求はまた、ユーザを認証する認証クレデンシャルを含み得、又は、ユーザは、他の方法でクエリ３３２Ａを含むネットワーク要求を受信したことに応じて認証されうる。
【００９６】
[0104]  ユーザが認証された後で、認証セッションは、セッション識別トークンの形式でユーザのために確立されうる。特に、当該セッション識別トークンは、成功裏にユーザを認証したことに応じて生成されうる。生成後には、セッション識別トークンは、ユーザのエンドユーザコンピューティングデバイスとフロントエンドサーバ３２６Ａとの間で、クエリ３３２Ａを含んだネットワーク要求と回答３３４Ａを含むネットワーク応答を含む、ネットワーク要求及びネットワーク応答において（例えば”クッキー”で）送信されうる。セッション識別トークンは、直接的又は間接的（例えば連想配列を介して）に、ユーザが成功裏に認証したユーザアカウント（例えばユーザ名によってユニークに識別されるアカウント）を識別する。セッション識別トークンは、更なるセキュリティのために暗号によって暗号化され得る。
【００９７】
[0105]  時々（例えば、クエリ３３２Ａを受信することに応じて）又はある期間にわたって（例えばユーザが認証された時間からユーザのエンドユーザコンピューティングデバイスに回答３３４Ａが戻るまで）、認証セッションデータ４１１は、フロントエンドサーバ３２６Ａの揮発性又は不揮発性メモリに格納されうる。認証セッションデータ４１１は、認証されたユーザのユーザ名、ユーザ識別子又は他のユーザアカウント識別子と、関連付けられた特権、許可及び権限の少なくともいずれかと、のような認証されたユーザと関連する情報を含み得る。
【００９８】
[0106]  サービングシステム３２５は、クエリ３３２Ａを満たし、且つ、ユーザのアクセスが認証されたドキュメントネームスペースに属すドキュメントインデックス３２８にインデックス化されたドキュメント３４０のみを識別するために、クエリ３３２Ａへの回答３３４Ａを制限することができる。サービングシステム３２５は、ドキュメントインデックス３２８が、クエリ３３２Ａを満たすが、ユーザのアクセスが認証されていないドキュメントネームスペースに属すインデックスドキュメント３４０をインデックス化しうるものの、この制限を行うことができる。
【００９９】
[0107]  クエリ３３２Ａに対する回答３３４Ａを制限するために、フロントエンドサーバ３２６Ａは、ネットワーク要求４１２を送信してアクセス制御サーバ４１０Ａにアクセスし、認証されたユーザによるアクセスが許容されるドキュメントネームスペースの識別子を要求する。アクセス制御サーバ４１０Ａによる決定を容易にするため、ネットワーク要求４１２は、認証されたユーザの表示又は識別子を含みうる。例えば、識別又は識別子は、ユーザ名、セッション識別子トークン、ユーザアカウント識別子、又は、ユーザ及び／又はユーザが成功裏に認証されたユーザアカウントをユニークに識別する他の情報であってよい。
【０１００】
[0108]  ネットワーク要求４１２を受信したことに応じて、アクセス制御サーバ４１０Ａは、認証されたユーザがアクセスすることが許可されたドキュメントネームスペースのユーザアカウントデータベースの識別子（図４では不図示）をルックアップすることができ、このルックアップは、要求４１２で提供された、認証されたユーザの識別又は識別子をルックアップ動作のキーとして用いてなされる。
【０１０１】
[0109]  フロントエンドサーバ３２６Ａは、様々な異なる時間帯において、アクセス制御サーバ４１０Ａにネットワーク要求４１２を送信し得、例えば、フロントエンドサーバ４２６Ａは、クエリ３３２Ａを受信したことに応じて、ネットワーク要求４１２を送信しうる。他の例として、フロントエンドサーバ４２６Ａは、成功裏にユーザを認証した後にネットワーク要求４１２を送信しうる。
【０１０２】
[0110]  ネットワーク要求４１２を受信したことに応じて、アクセス制御サーバ４１０Ａは、認証されたユーザがアクセスを許可された、認証されたドキュメントネームスペースの識別子を含むネットワーク応答４１３を返す。認証された各ドキュメントネームスペースは、認証されたユーザが、ドキュメントネームスペースの明示的及び／又は暗黙的なアクセス制御に従ういくつかのアクセスレベルでアクセスを許可された認証されたドキュメントネームスペースを、ユニークに識別する。例えば、認証されたドキュメントネームスペースの識別子は、認証されたユーザが、ドキュメントネームスペースに属すドキュメント３４０への、少なくとも読み取りアクセス権を有するドキュメントネームスペースを識別しうる。続くネットワーク要求に対する処理の効率化のため、フロントエンドサーバ３２６Ａは、認証されたユーザのために維持される認証セッションデータ４１１の一部として、認証されたドキュメントネームスペースの識別子を格納（キャッシュ）しうる。この場合、フロントエンドサーバ３２６Ａは、クエリ３３２Ａを受信したことに応じて、ネットワーク要求４１２をアクセス制御サーバ４１０Ａに送信する必要がない。
【０１０３】
[0111]  ユーザのエンドユーザコンピューティングデバイスからのクエリ３３２Ａを含むネットワーク要求はまた、ユーザが検索することを望むドキュメントネームスペースの識別子を特定しうる。この場合、ユーザが検索することを望むドキュメントのネームスペースの識別子のセットと、ユーザのアクセスが許可された認証されたドキュメントネームスペースの識別子のセットとの共通部分が計算されて、検索のための認証されたドキュメントネームスペースの識別子のセットが決定されうる。この共通部分は、フロントエンドサーバ３２６Ａによって実行されうる。或いは、この共通部分は、アクセス制御サーバ４１０Ａによって実行されうる。この場合、フロントエンドサーバ３２６Ａは、ネットワーク要求４１２内に、ユーザが検索することを望むドキュメントのネームスペースの識別子を含み、ネットワーク応答４１３は、アクセス制御サーバ４１０Ａによって計算されるような共通部分の結果を含みうる。
【０１０４】
[0112]  クエリ３３２Ａを含むネットワーク要求が、特定の要求された検索すべきドキュメントネームスペースでない場合、認証された検索すべきドキュメントネームスペースの識別子のデフォルトのセットが選択されうる。このデフォルトのセットの選択は、応答４１３で戻る認証されたドキュメントネームスペースの識別子から、又は、場合によっては認証セッションデータ１１の一部としてのキャッシュから、フロントエンドサーバ３２６Ａによって実行されうる。或いは、アクセス制御サーバ４１０Ａは、ユーザがアクセスを許可された、全ドキュメントネームスペースのセットからデフォルトのセットを選択しうる。いずれの場合も、デフォルトのセットは、ａ）ユーザがアクセスを許可された、全ドキュメントネームスペース（例えば、認証されたユーザのアカウントに関連付けられた全ドキュメントネームスペース）、又は、ｂ）それらのサブセットを特定することができる。
【０１０５】
[0113]  検索のための認証されたドキュメントネームスペースの識別子が決定された後、クエリ３３２Ａと検索のための認証されたドキュメントネームスペースの識別子とを含むネットワーク要求が、クエリプロセッサ３２７による更なるクエリ３３２Ａの処理のために、フロントエンドサーバ３２６Ａからルーティングサーバ４２０Ａに送信されうる。
【０１０６】
[0114]  クエリ３３２Ａと検索のための認証されたドキュメントネームスペースの識別子とを含む、フロントエンドサーバ３２６Ａからのネットワーク要求を受信したことに応じて、ルーティングサーバ４２０Ａにおけるクエリプロセッサ３２７は、クエリ３３２Ａをルーティングする１つ以上のサーバ４３０を決定する。この決定は、ルーティングサーバ４２０Ａが、検索のための認証されたドキュメントネームスペースの識別子の各々に対して決定論マッピング機能（deterministic mapping function）４１６を適用した結果に基づいてなされうる。決定論マッピング機能４１６と、ドキュメントネームスペースの識別子が与えられたインデックスサーバマッピング４１７とはルーティングサーバ（例えば４２０Ａ）によって用いられて、所定のドキュメントネームスペースのドキュメントをインデックス化するインデックスシャード（例えば３２８Ｂ）を格納するインデックスサーバ（例えば４３０Ｂ）が決定される。
【０１０７】
[0115]  本発明のいくつかの実施形態に従って、決定論マッピング機能４１６は、ドキュメントネームスペースを割り当てるインデックスシャード（例えば３２８Ｂ）を決定するために、一方向ハッシュ関数、単純なハッシュ関数、コンシステントハッシュ（consistent hash）関数等を検索するドキュメントネームスペースの識別子に適用する。この決定を実行するため、ルーティングサーバ４２０Ａのクエリプロセッサ３２７は、インデックスサーバマッピング４１７へのアクセスを有しうる。同時に、決定論マッピング機能４１６とインデックスサーバマッピング４１７とは、ルーティングサーバ４２０Ａのクエリプロセッサ３２７の方法を提供して、所定のドキュメントネームスペースのためのインデックスを含むインデックスシャード（例えば３２８Ｂ）を可能するインデックスサーバ（例えば４３０Ｂ）のホスト名又はネットワークアドレスを決定する。
【０１０８】
[0116]  本発明のいくつかの実施形態では、決定論マッピング機能４１６は、ハッシュ機構（hash mechanism）とモジュロ機構（modulo mechanism）とを含む。ハッシュ機構は、入力としてドキュメントネームスペースの識別子（例えばドキュメントネームスペースの識別子を表す文字列データ）を受け付け、出力としてハッシュ値ｈｖを生成しうる。例えば、ハッシュ機構は、ＭＤ４、ＭＤ５、ＳＨＡ−１又はＳＨＡ２メッセージダイジェストアルゴリズムを含み得、メッセージダイジェストアルゴリズムは、入力として提供されたドキュメントネームスペースの識別子に適用したときに、出力としてハッシュ値（例えば３２ビットのハッシュ値）を生成する。モジュロ機構は、係数ｋによってハッシュ値ｈｖを除算した余りｒを計算し、これにより、入力のドキュメントネームスペースの識別子を、０からｋ−１の範囲内でｋの１つにマッピングする。係数ｋは、例えば、実際の、期待される又は望ましいインデックスサーバ４３０の数、ドキュメントインデックス３２８によってインデックス化された、実際の、期待される又は望ましいドキュメントネームスペースの数、及び、実際の、期待される又は望ましいドキュメントネームスペースのグループの数の少なくともいずれかを含む、様々な異なる要素に基づいて選択され得る。１つの例示的な実施形態では、値ｋは２のべき乗であり少なくとも１０２４と等しい。
【０１０９】
[0117]  本発明のいくつかの実施形態では、インデックスサーバマッピング４１７は、インデックスサーバ４３０のそれぞれに対するエントリを含む。このようなエントリのそれぞれは、０からｋ−１の範囲の１つ以上の重複していないサブレンジ（sub-range）によってキーが付与（keyed）される。例えば、マッピング４１７内の第１エントリＥ１は、０からｋ−１の範囲内における連続値の第１の範囲を定義するＫ１とＫ２の値を含むキーを有し得、マッピング４１７内の第２エントリＥ２は、０からｋ−１の範囲内における連続値の第２の範囲を定義するＫ３とＫ４の値を含むキーを含み得、ここで第１の範囲のＫ１からＫ２は第２の範囲のＫ３からＫ４とは重複しない。
【０１１０】
[0118]  ルーティングサーバ４２０Ａにおけるクエリプロセッサ３２７が所定のドキュメントネームスペースの識別子に決定論マッピング機能４１６を適用する場合、０からｋ−１の範囲内の値ｒが生成されうる。ルーティングサーバ４２０Ａにおけるクエリプロセッサ３２７は、インデックスサーバマッピング４１７と値ｒを情報交換して、値ｒがエントリキーの範囲内であるエントリを識別する。このエントリのホスト名又はネットワークアドレスは、所定のドキュメントネームスペースに属すドキュメント３４０をインデックス化するインデックスシャード（例えば３２８Ｂ）が格納されるインデックスサーバ（例えば４３０Ｂ）を識別しうる。
【０１１１】
[0119]  本発明のいくつかの実施形態では、インデックスシャード（例えば３２８Ｂ）に割り当てられるドキュメントネームスペースは、インデックスシャードが格納されるインデックスサーバ（例えば４３０Ｂ）に格納されるインデックスファイルの数を低減するために、インデックスシャードのより少ない数のドキュメントネームスペースのグループにグループ分けされる。すなわち、インデックスシャード（例えば３２８Ｂ）内で、インデックスシャードに割り当てられたるドキュメントネームスペースはドキュメントネームスペースのグループに分割されうる。そのようなドキュメントネームスペースのグループのそれぞれは、複数のドキュメントネームスペースを含みうる。
【０１１２】
[0120]  例えば、インデックスシャード（例えば３２８Ｂ）に割り当てられる２百万（2,000,000）のドキュメントネームスペースのそれぞれは、インデックスシャードの８０のドキュメントネームスペースのグループの１つに分割されうる。効率化のため、インデックスシャード（例えば３２８Ｂ）が格納されるインデックスサーバ（例えば４３０Ｂ）は、８０のドキュメントネームスペースのグループのそれぞれに対する、１つ以上のインデックスファイルを、２百万（2,000,000）のドキュメントネームスペースのそれぞれに対する、１つ以上のインデックスファイルの代わりに格納しうる。この場合、ドキュメントネームスペースの識別子に適用される場合にハッシュ機構によって出力されるハッシュ値ｈｖは、所定のドキュメントネームスペースが属すドキュメントネームスペースのグループの識別子として用いられうる。
【０１１３】
[0121]  いくつかの実施形態では、ドキュメントネームスペースのグループはインデックスシャード（例えば３２８Ｂ）を更に分割するためには用いられない。このような実施形態では、係数ｋによってハッシュ値ｈｖを除算した余りｒが、所定のドキュメントネームスペースが割り当てられるドキュメントネームスペースのグループの識別子として用いられうる。これらの実施形態ではまた、インデックスシャードが格納されるインデックスサーバは、インデックスシャードが割り当てられる全てのドキュメントネームスペースに対する１つ以上のインデックスファイルを格納しうる。例えば、インデックスサーバは、インデックスシャードが割り当てられる全てのドキュメントネームスペースに対する単一のインデックスファイルを格納しうる。
【０１１４】
[0122]  図４では、インデックスサーバマッピング４１７が決定論マッピング機能４１６及びルーティングサーバ４２０Ａにおけるクエリプロセッサ３２７とは別に図示されているが、インデックスサーバマッピング４１７は、決定論マッピング機能４１６の構成要素、又はルーティングサーバ４２０Ａにおけるクエリプロセッサ３２７の構成要素であってもよい。更に、各ルーティングサーバ４２０Ａは、インデックスサーバマッピング４１７へのアクセスを有しうる。この場合、効率的なアクセスのために、インデックスサーバマッピング４１７のコピーがルーティングサーバ４２０のそれぞれにおいて格納（キャッシュ）されうる。追加的に又は代替的に、インデックスサーバマッピング４１７は、ネットワークサービスとしてルーティングサーバに対して利用可能であってもよい。サービングシステム３２５は、負荷分散、容量の増加、スループットの増加、レイテンシの低減、フェイルオーバ、及び冗長性の少なくともいずれかのために、水平方向にスケールされる複数のルーティングサーバ４２０を含みうる。
【０１１５】
[0123]  例示的な実施形態では、ドキュメントインデックス３２８は、４億（400,000,000）を超えるドキュメントネームスペースのドキュメント３４０をインデックス化し、決定論マッピング機能４１６とインデックスサーバマッピング４１７とは、４億（400,000,000）を超えるドキュメントネームスペースのそれぞれを、およそ２百（200）のインデックスシャード（例えば３２８Ａ、３２８Ｂ、３２８Ｃ...３２８Ｎ）の１つに割り当てる（マッピングする）。この例示的な実施形態では、各インデックスシャード（例えば３２８Ａ）は、およそ２百万（2,000,000）のドキュメントネームスペースにおけるドキュメント３４０をインデックス化する。
【０１１６】
[0124]  いくつかの例では、インデックスサーバ（例えば４３０Ｃ）は、実際には水平方向に分散された複数のサーバを含み、インデックスシャード（例えば３２８Ｃ）に対する負荷分散、フェイルオーバ、冗長性を提供する。この場合、複数のインデックスサーバのそれぞれは、インデックスシャード（例えば３２８Ｃ）の複製（replica）又はコピーを格納しうる。
【０１１７】
[0125]  いくつかの例では、インデックスサーバ（例えば４３０Ａ）は、インデックスシャード（例えば３２８Ａ）の一部を格納する、複数のサーバを含む。この場合、複数のレベルのルーティングサーバが存在しうる。第１のルーティングレベルは、フロントエンドサーバ３２６Ａから受信したクエリ３３２Ａを、１つ以上のインデックスサーバ４３０にルーティングするルーティングサーバ４２０Ａによって例示される。この例では、ルーティングサーバの第２のレベルは、インデックスサーバ（例えば４３０Ｃ）内でクエリをインデックスサーバの複数のサーバの１つ以上に更にルーティングするために存在しうる。この場合、第２のレベルのルーティングサーバはまた、決定論マッピング機能と、ドキュメントネームスペースの識別子に基づいてクエリをルーティングするための決定論マッピング機能４１６とインデックスサーバマッピング４１７のようなマッピングとを有し得る。
【０１１８】
[0126]  図４の例では、クエリ３３２Ａは、ルーティングサーバ４２０Ａにより、決定論マッピング機能４１６とインデックスサーバマッピング４１７に従ってインデックスサーバ４３０Ｂと４３０Ｃとにルーティングされる。しかし、クエリ３３２Ａは、クエリ３３２Ａを用いて検索する認証されたドキュメントネームスペースの数に応じて、容易に単なる１つのインデックスサーバ４３０にルーティングされるか、２つ以上のインデックスサーバ４３０にルーティングされるかする。例えば、検索する１つの認証されたドキュメントネームスペースのみが存在する場合、又は、検索する全ての認証されたドキュメントネームスペースが１つのインデックスシャード（例えば３２８Ｂ）に割り当てられている場合、そのときは、クエリ３３２Ａは、ルーティングサーバ４２０Ａにより、単なる１つのインデックスサーバ（例えば４３０Ｂ）にルーティングされうる。
【０１１９】
[0127]  クエリ３３２Ａをインデックスサーバ（例えば４３０Ｂ）にルーティングする場合、ルーティングサーバ４２０Ａは、インデックスサーバへクエリ３３２Ａを含むネットワーク要求を送信しうる。加えて、ネットワーク要求は、インデックスサーバに格納されたインデックスシャード（例えば３２８Ｂ）に割り当てられる、検索する識別されたドキュメントネームスペースの識別子を含みうる。加えて、そのような認証されたドキュメントネームスペースの識別子のそれぞれは、ネットワーク要求内で、ドキュメントネームスペースが属すドキュメントネームスペースのグループの識別子と関連付けられ得る。
【０１２０】
[0128]  本発明のある実施形態では、インデックスサーバ（例えば４３０Ｂ）のクエリプロセッサ３２７は、ルーティングサーバ４２０Ａから受信したネットワーク要求内の、ドキュメントネームスペースのグループの識別子を用いる。例えば、インデックスサーバのクエリプロセッサ３２７は、ネットワーク要求内のドキュメントネームスペースのグループの識別子に基づいて、インデックスサーバの不揮発性メモリに格納される所定のインデックスデータベースにのみ、又はインデックスサーバの不揮発性メモリに格納された所定のデータ構造にのみアクセスしうる。
【０１２１】
[0129]  例として、対応するドキュメントネームスペースの識別子”ａｂｃｄ”及び”ｄeｆｇ”を用いて２つの認証されたドキュメントネームスペースが検索されるべきであることを特定したクエリ３３２Ａを含むネットワーク要求が、フロントエンドサーバ３２６Ａからルーティングサーバ４２０Ａに送信されることを想定する。更に、決定論マッピング機能４１６とインデックスサーバマッピング４１７に従って、認証されたドキュメントネームスペース”ａｂｃｄ”がドキュメントネームスペースのグループ”１２３４”に属し、かつインデックスシャード３２８Ｂに割り当てられるとともに、認証されたドキュメントネームスペース”ｄeｆｇ”がドキュメントネームスペースのグループ”５６７８”に属し、かつインデックスシャード３２８Ｃに割り当てられることを想定する。この場合、ルーティングサーバ４２０Ａからインデックスサーバ４３０Ｂへのネットワーク要求が、ドキュメントネームスペースのグループ”１２３４”におけるドキュメントネームスペース”ａｂｃｄ”が検索されるべきであることを特定し、ルーティングサーバ４２０Ａからインデックスサーバ４３０Ｃへのネットワーク要求が、ドキュメントネームスペースのグループ”５６７８”におけるドキュメントネームスペース”ｄeｆｇ”が検索されるべきであることを特定する。インデックスサーバ４３０Ｂは、クエリ３３２Ａに対する回答４１８Ａを形成する場合に、インデックスサーバ４３０Ｂへ送信されたネットワーク要求内の、ドキュメントネームスペースのグループの識別子”１２３４”を用いて、インデックスサーバ４３０Ｂのクエリプロセッサ３２７によってアクセスされるインデックスシャード３２８Ｂの部分を限定する。同様に、インデックスサーバ４３０Ｃは、クエリ３３２Ａに対する回答４１８Ｂを形成する場合に、インデックスサーバ４３０Ｃへ送信されたネットワーク要求内の、ドキュメントネームスペースのグループの識別子”５６７８”を用いて、インデックスサーバ４３０Ｃのクエリプロセッサ３２７によってアクセスされるインデックスシャード３２８Ｃの部分を限定する。このような限定は、例えば、インデックスサーバの不揮発性メモリに格納されるインデックスデータベースファイル３５１、及び／又は、特定されたドキュメントネームスペースのグループの識別子に関連付けられたインデックスサーバの不揮発性のメモリ内のデータにのみアクセスすることを含みうる。
【０１２２】
[0130]  ルーティングサーバ４２０Ａは、インデックスサーバ４３０のそれぞれのクエリプロセッサ３２７が並行してクエリを処理することができるように、クエリ３３２Ａを複数のインデックスサーバ（例えば４３０Ｂ、４３０Ｃ）にルーティングしうる。例えば、ルーティングサーバ４２０Ａは、クエリ３３２Ａを含むネットワーク要求を、ルーティングサーバ４２０Ａが、クエリ３３２Ａを含むインデックスサーバ４３０Ｃへのネットワーク要求を送信するのと同時又はほぼ同時に、インデックスサーバ４３０に送信しうる。この場合、インデックスサーバ４３０Ｂのクエリプロセッサ３２７は、インデックスシャード３２８Ｂに対するクエリ３３２Ａを、インデックスサーバ４３０Ｂのクエリプロセッサ３２７がインデックスシャード３２８Ｃに対するクエリ３３２Ａを処理するのと同時又はほぼ同時に、処理しうる。
【０１２３】
[0131]  インデックスサーバ４３０（例えば４３０Ｂ）においてクエリ３３２Ａが受信された場合、インデックスサーバのクエリプロセッサ３２７はインデックスサーバに格納されたインデックスシャード（３２８Ｂ）を情報交換して（にアクセスして）、クエリを満たすドキュメント３４０を決定する。このようにするために、インデックスサーバのクエリプロセッサ３２７は、クエリに対する回答（例えば４１８Ａ）においておそらく識別可能なドキュメント３４０を、検索されるべき認証されたドキュメントネームスペースに属すドキュメント３４０のみに制限しうる。この制限を行うために、インデックスサーバのクエリプロセッサ３２７は、ルーティングサーバ４２０Ａからのネットワーク要求において識別子クエリ３３２Ａに付随する、認証されたドキュメントネームスペースを用いうる。加えて、インデックスシャードにインデックス化されたドキュメント３４０のドキュメント識別子は、インデックス化されたドキュメント３４０が属すドキュメントネームスペースの、ドキュメントネームスペースの識別子と関連付けられうる。これらの関連は、クエリプロセッサ３２７がドキュメント３４０を制限することを容易にする。ここで、当該ドキュメントは、１）クエリ３３２Ａを満たすドキュメント、及び、２）検索されるべき認証されたドキュメントネームスペースの識別子の１つである、ドキュメントネームスペースの識別子に関連付けられたドキュメントに対するクエリへの回答の中で識別されることができる。インデックス化されたドキュメント３４０が別のやり方でクエリを満たしたとしても、ドキュメント３４０が検索する認証されたドキュメントネームスペースの１つに属さない場合には、インデックスサーバのクエリプロセッサ３２７は、クエリ３３２への回答４１８Ａにおいてドキュメント３４０を特定しないようにしてもよい。
【０１２４】
[0132]  ルーティングサーバ（例えば４２０Ａ）に戻るインデックスサーバ（例えば４３０Ｂ）からの回答（例えば４１８Ａ）は、クエリ３３２Ａを満たす認証されたドキュメントネームスペースの１つ以上でドキュメント３４０を識別しうる。ドキュメントは、インデックスサーバのクエリプロセッサ３２７によって採用されるランキング機能に従ってランク付けされうる。このランキング機能は、インデックス化されたドキュメントに対して計算された、クエリ依存型メトリクス及びクエリ非依存型メトリクスの少なくともいずれかに基づきうる。
【０１２５】
[0133]  クエリ３３２Ａに対するインデックスサーバ（例えば４３０Ｂ）からの回答（例えば４１８Ａ）は、ランキング機能によって生成された、識別されたドキュメントのそれぞれに対するランキングスコアを含みうる。クエリプロセッサ３２７は、異なるインデックスサーバで生成された、同一のクエリに対するランキングスコアが互換性を有するように、インデックスサーバ（例えば、４３０Ａ、４３０Ｂ、４３０Ｃ、...４３０Ｎ）と全く同一のランキング機能を採用しうる。インデックスサーバと全く同一のランキング機能を用いることは、ルーティングサーバ４２０Ａにおけるクエリプロセッサ３２７が、インデックスサーバ４３０Ｂ及び４３０Ｃから戻る、クエリ３３２Ａに対する複数の回答４１８Ａ及び４１８Ｂで識別されたドキュメント３４０を、フロントエンドサーバ３２６Ａへ戻る、そして最終的には、フロントエンドサーバ３２６Ａがクエリ３３２Ａを受信したエンドユーザコンピューティングデバイス３１１Ａに戻る、単一の回答３３４Ａに統合できるようにする。
【０１２６】
[0134]  本発明のいくつかの実施形態に従って、フロントエンドサーバ３２６Ａは、従来型のスペリング修正アルゴリズム及び従来型の発音修正アルゴリズム（例えばsoundexアルゴリズム）の少なくともいずれかを、得られた検索クエリ３３２Ａに適用しうる。スペリング修正アルゴリズムはスペリング修正の異なる形式を適用することができる。例えば、スペリング修正アルゴリズムは、従来型の分離語の修正アルゴリズム（isolated-term correction algorithm）（例えば、距離編集及び／又はk-gram重複）及び／又は従来型のコンテキスト依存型の修正アルゴリズムを適用することができる。従って、ルーティングサーバ４２０Ａに転送され、インデックスサーバ４３０にルーティングされたクエリ３３２Ａは、フロントエンドサーバ３２６Ａによってクエリ３３２Ａのトークンに対して実行されるスペリング修正及び／又は発音修正の結果を反映しうる。
【０１２７】
＜インデックスシャード＞
[0135]  次に、図５を参照して、本発明のいくつかの実施形態に従う、ドキュメントインデックス３２８のインデックスシャード（例えば３２８Ｂ）のブロック図について説明する。本発明のいくつかの実施形態では、インデックスシャードは、辞書５１０と、対応する登録５２０とを含む逆インデックスのように構築されうる。
【０１２８】
[0136]  辞書５１０は、登録５２０内で識別されるドキュメント３４０がインデックス化される、インデックストークン（例えばトークン１、トークン２、トークン３、...トークンＮ、）を含みうる。辞書５１０もまた、各インデックストークン（例えばトークン１）に対して、１つ以上のドキュメントの識別子（例えばＤＯＣ  ＩＤ１）の登録リスト（例えば登録リスト２）へのポインタを含み得、当該１つ以上のドキュメントの識別子は、インデックストークンがインデックス化された（現われる）ドキュメント３４０を識別する。
【０１２９】
[0137]  辞書５１０はまた、例えばトークン頻度情報、又は、クエリに依存した方法及び／又はクエリに非依存の方法で検索クエリへのドキュメントの関連をランク付け又は他の方法で決定するクエリプロセッサ３２７のランキング機能で用いられうる他の情報などの、例えばトークン属性情報などのインデックストークン以外の情報を含みうる。
【０１３０】
[0138]  登録５２０の登録リスト（例えば、登録リスト２）は、ドキュメント識別子以外の情報、例えば、ドキュメントトークンの属性情報、例えば、特定のドキュメント３４０内のトークンのトークン頻度、特定のドキュメント３４０内のトークンの１つの位置又は複数の位置などの情報、又は、クエリに依存した方法及び／又はクエリに非依存の方法でクエリへのドキュメント３４０の関連をランク付けする又は他の方法で決定するクエリプロセッサ３２７のランキングアルゴリズムによって使用されうる他の情報を含みうる。
【０１３１】
[0139]  登録５２０内のドキュメント識別子（例えばＤＯＣ  ＩＤ１、ＤＯＣ  ＩＤ２、ＤＯＣ  ＩＤ３...ＤＯＣ  ＩＤ Ｎ）は、識別されるドキュメント３４０が属すドキュメントネームスペースを示すドキュメントネームスペースの識別子と関連付けられうる。この関連はまた、インデックスサーバ（例えば４３０Ｂ）のクエリプロセッサ３２７が、クエリ（例えば３３２）に対する回答（例えば４１７Ａ）を制限して、検索されるべき認証されたドキュメントネームスペースに属すドキュメント３４０のみを識別できるようにする。
【０１３２】
[0140]  例えば、登録リスト（登録リスト２）の要素は、ドキュメント３４０が属すドキュメントネームスペースを識別するドキュメントネームスペースの識別子を用いてプリフィックスされ（prefixed）得る。例えば、登録リスト（例えば登録リスト２）は、＜ドキュメントネームスペースの識別子＞：＜ドキュメント識別子＞の形式の文字列データであり得、ここで＜ドキュメントネームスペースの識別子＞は、ドキュメントネームスペースを識別する文字列データフィールド、＜ドキュメント識別子＞はドキュメントネームスペースに属すドキュメント３４０を識別する文字列データフィールドである。コロン”：”文字は、セパレータ文字として用いられて、登録リスト要素内の文字列データフィールドを分割する。他のセパレータ文字も使用可能である。セパレータ文字を用いないことも可能であり、例えば、文字列データフィールドを固定長にすることもできる。ドキュメント識別子のための他の形式も使用可能であり、本発明は特定のプレフィックス形式を何ら限定しない。
【０１３３】
[0141]  ドキュメント３４０と属すドキュメントネームスペースとを関連付けるドキュメントネームスペースの識別子を用いて、登録リストのドキュメント識別子をプレフィックスする代わりに、インデックスシャードは、多対１マッピングを有し得る。この多対１マッピングは、所定のドキュメント識別子を、ドキュメント３４０が属すドキュメントネームスペースの識別子にマップする。このマッピングは、ドキュメントネームスペースは複数のドキュメント３４０を含みうるため、多対１である。
【０１３４】
[0142]  本発明のいくつかの実施形態では、スペースの効率化及び登録５２０のサイズ低減のため、登録リストのドキュメントネームスペースの識別子又はドキュメント識別子（例えば登録リスト２）は、ローカル識別子を含み、このローカル識別子は、インデックスシャード（インデックスシャード３２８Ｂ）に対して局所的であり、かつ、（バイト数に関して）サイズがより大きい、グローバルのドキュメントネームスペースの識別子又はグローバルのドキュメント識別子の代用となる。このローカル識別子は、当該ローカル識別子が代用となる、グローバルのドキュメントネームスペースの識別子或いはグローバルのドキュメント識別子よりも（バイト数に関して）サイズが小さくなり得る。
【０１３５】
[0143]  インデックスシャード（例えば３２８Ｂ）は、所定のローカル識別子をグローバルのドキュメント識別子にマップする１対１マッピングを含みうる。或いは、２つの１対１のマッピングを有し得る。マッピングの１つは、ローカルのドキュメントネームスペースの識別子からグローバルのドキュメントネームスペースの識別子へ変換し、他のマッピングは、ローカルのドキュメント識別子をグローバルのドキュメント識別子に変換する。更に他の代替として、所定のローカルドキュメントネームスペースからグローバルの識別子とドキュメント３４０の属すドキュメントネームスペースのグローバルドキュメントネームスペースの識別子に変換する１対１マッピングを有し得る。
【０１３６】
[0144]  本説明において、明示的な説明がない限り、ドキュメント３４０の”ドキュメント識別子”は、ドキュメント識別子の全ての取り得る形式を参照し得、当該ドキュメント識別子は、ドキュメント３４０のローカルなドキュメント識別子とドキュメント３４０のグローバルなドキュメントの識別子とを含み、直接的に又は間接的に（例えば、連想配列を通じて）ユニークにドキュメント３４０を識別する。
【０１３７】
[0145]  同様に、本説明において、明示的に説明がない限り、ドキュメントネームスペースの”ドキュメントネームスペースの識別子”は、ドキュメントネームスペースの識別子の全ての取り得る形式を参照し得、当該ドキュメントネームスペースの識別子は、ローカルなドキュメントネームスペースの識別子とグローバルなドキュメントネームスペースの識別子とを含み、ドキュメントネームスペースを直接的に又は間接的に（例えば、連想配列を通じて）ユニークにドキュメントネームスペースを識別する。
【０１３８】
[0146]  本発明のいくつかの実施形態によれば、クエリ（例えば３３２）がインデックスサーバ（例えば４３０Ｂ）において受信されると、インデックスサーバのクエリプロセッサ３２７は、対応する登録リスト５２０における登録リストを識別するために、辞書５１０へのキーとしてクエリのクエリトークンを使用する。クエリに複数のクエリトークンがある場合、対応する登録リストは、複数のクエリのトークンが論理式として互いにどのように関連するのかに従って適切にマージされうる。
【０１３９】
[0147]  本発明の実施形態では、インデックスサーバのクエリプロセッサ３２７は、クエリに対する回答（例えば４１７Ａ）に含まれ得る、対応する登録リスト内で識別されるドキュメント３４０を、検索されるべき認証されたドキュメントネームスペースに属すドキュメント３４０に制限する。本発明のいくつかの実施形態では、インデックスサーバのクエリプロセッサ３２７は、対応する登録リスト内でドキュメント識別子に関連付けられたドキュメントネームスペースの識別子を比較することによって、（ルーティングサーバ（例えば４２０Ａ）からの、クエリを含むネットワーク要求に含まれる）クエリと関連付けられた認証されたドキュメントネームスペースの識別子に限定する。クエリを他の方法で満たす、ドキュメント３４０のドキュメント識別子と関連付けられたドキュメントネームスペースの識別子が、クエリと関連付けられた認証されたドキュメントネームスペースの識別子と一致する場合、ドキュメント３４０はクエリに対する回答に含まれうる。しかしながら、ドキュメント識別子と関連付けられたドキュメントネームスペースの識別子が、クエリと関連付けられた認証されたドキュメントネームスペースの識別子と一致しない場合、そのドキュメントが他の方法でクエリを満たす場合であっても、ドキュメント３４０はクエリに対する回答に含まれない。このように、インデックスサーバ４３０のクエリプロセッサ３２７は、回答を、検索されるべきクエリと関連付けられた認証されたドキュメントネームスペースに属すドキュメント３４０のみに制限しうる。
【０１４０】
[0148]  本発明のいくつかの実施形態では、インデックスシャードは複数の辞書５１０／登録５２０のペアを格納する。例えば、インデックスシャードは、インデックスシャードに関連付けられた複数のドキュメントネームスペースのそれぞれに対して、又は、インデックスシャードに関連付けられた複数のドキュメントネームスペースのグループのそれぞれに対して、辞書５１０と対応する登録５２０とを格納し得る。
【０１４１】
[0149]  本発明の複数の実施形態では、インデックスシャード（３２８Ｂ）は、インデックスデータファイル３５１の識別可能な別々のセットと、インデックスシャードに関連付けられるドキュメントネームスペースのグループの識別子に従う揮発性メモリデータ構造とに組織化され得る。この場合、分離された辞書５１０、又は、インデックスシャードに割り当てられるドキュメントネームスペースのグループのそれぞれに対して分離された辞書５１０と対応する登録５２０が存在し得る。クエリ（例えば３３２）がインデックスサーバ（例えば４３０Ｂ）において受信されると、インデックスサーバのクエリプロセッサ３２７は、ルーティングサーバからのネットワーク要求における、認証されたドキュメントネームスペースの識別子と関連付けられたドキュメントネームスペースのグループの識別子を用いて、アクセスすべき、辞書５１０或いは辞書５１０と対応する登録５２０を決定することができる。
【０１４２】
[0150]  本発明の複数の実施形態では、インデックスシャード（３２８Ｂ）は、インデックスデータファイルの識別可能な別々のセットと、インデックスシャードに関連付けられるドキュメントネームスペースの識別子に従う揮発性メモリデータ構造とに組織化され得る。この場合、分離された辞書５１０、又は、インデックスシャードに割り当てられるドキュメントネームスペースのそれぞれに対して分離された辞書５１０と対応する登録５２０が存在し得る。クエリ（例えば３３２）がインデックスサーバ（例えば４３０Ｂ）において受信されると、インデックスサーバのクエリプロセッサ３２７は、ルーティングサーバからのネットワーク要求における、認証されたドキュメントネームスペースの識別子と関連付けられたドキュメントネームスペースのグループの識別子を用いて、アクセスすべき、辞書５１０或いは辞書５１０と対応する登録５２０を決定することができる。
【０１４３】
[0151]  本発明のいくつかの実施形態では、インデックスシャードは複数の辞書５１０／登録５２０のペアを、クエリの異なる種別を処理するために格納する。例えば、インデックスシャードに関連付けられた、所定のドキュメントネームスペース又はドキュメントネームスペースのグループに対し、インデックスシャードは、非コンプリーションクエリを処理するための第１の辞書５１０／登録５２０のペアと、コンプリーションクエリを処理するための第２の辞書５１０／登録５２０とを格納し得る。分離された辞書５１０／登録５２０のペアを格納することにより、構造と、辞書５１０のコンテンツ及び対応する登録５２０とが、所定の種別のクエリを処理するために適合したものになる。例えば、コンプリーションクエリを処理するための辞書５１０は、ドキュメントの全テキストと対立するインデックストークンとして、ドキュメントのファイル名に対するインデックストークンのみを含んで、不揮発性メモリ（例えばフラッシュメモリ）又は揮発性メモリ（例えばＲＡＭ）に格納する際に消費されるバイトに関して辞書のサイズを低減し得る。これにより、クエリプロセッサ３２７がより高速にコンプリーションクエリを処理することを可能にする。
【０１４４】
[0152]  インデックスサーバ（例えば４３０Ｃ）のクエリプロセッサ３２７は、より効率的なアクセスのため、辞書５１０（又はその一部）を不揮発性メモリ（例えばフラッシュメモリ）から揮発性メモリ（例えばＲＡＭ）に読み込む。登録リスト（例えば登録リスト２）は、より効率的なアクセスのため、インデックスサーバ（例えば４３０Ｃ）の不揮発性メモリ（例えばフラッシュメモリ）に格納され、及び／又は、インデックスサーバの揮発性メモリ（例えばＲＡＭ）にキャッシュされうる。キャッシュされた登録リストは、例えば最長未アクセスポリシーなどのキャッシュ退避ポリシーに従って、インデックスサーバの揮発性メモリから退避される。インデックスサーバ（例えば４３０Ｂ）のクエリプロセッサ３２７はまた、登録５２０から検索された複数の登録リストについて実行されるマージアルゴリズムの結果として生成される登録リストを、揮発性メモリにキャッシュしうる。このようにすることで、インデックスサーバのクエリプロセッサ３２７は、複数の登録リストについてマージアルゴリズムを後に実行しなければならなくなることを回避し得る。
【０１４５】
[0153]  図５の参照を継続して、本発明のいくつかの実施形態では、コンプリーションクエリの処理を容易にするため、辞書５１０内のインデックストークンはドキュメントネームスペースの識別子によってプレフィックスされ得、プレフィックスされたインデックストークンは、辞書内においてプレフィックスされたインデックストークンの辞書順でソートされうる。この方法で構成される辞書５１０は、以下では”コンプリーション（completion）”辞書として参照される。
【０１４６】
[0154]  本発明のいくつかの実施形態では、プレフィックスされたインデックストークンに関連付けられた登録リストは、プレフィックスされたインデックストークンにおいて識別されるドキュメントネームスペースに属す、ドキュメント３４０のドキュメント識別子を含みうる。従って、コンプリーション辞書が、１つ以上のドキュメントネームスペースに対するプレフィックスされたインデックストークンを含む場合、インデックストークンは、１度以上、複数のドキュメントネームスペースのそれぞれに対して一度の頻度で、コンプリーション辞書に現れ得る。
【０１４７】
[0155]  例えば、コンプリーション辞書におけるプレフィックスされたインデックストークンは、＜ドキュメントネームスペースの識別子＞：＜インデックストークン＞の形式を有し得、ここで＜ドキュメントネームスペースの識別子＞は、ドキュメントネームスペースを識別する文字列データフィールド、＜インデックストークン＞はインデックストークンの文字を含む文字列データフィールドである。コロン”：”又は他の文字は、セパレータ文字として用いられて、プレフィックスされたインデックストークン内の文字列データフィールドを分割する。プレフィックスされたインデックストークンの例は、［ａｂｃｄ：プライベート］（囲い括弧は除く）であり、ここで、”ａｂｃｄ”はドキュメントネームスペースの識別子であり、”プライベート”（private）はインデックストークンである。
【０１４８】
[0156]  プレフィックスされたインデックストークンの辞書順ソートに従ってコンプリーション辞書内のプレフィックスされたインデックストークンをソートすることにより、インデックスサーバ（例えば４３０Ｂ）のクエリプロセッサ３２７は、コンプリーションクエリのコンプリーショントークンに対して、より効率的に可能性のあるコンプリーション要素を識別することができる。特に、同一のドキュメントネームスペースに属し且つコンプリーショントークンと一致するプレフィックスを共有するコンプリーション辞書におけるインデックストークンは、プレフィックスされたインデックストークンの辞書順ソートの結果として、コンプリーション辞書が不揮発性メモリ又は揮発性メモリに格納される際に、（連続して又は隣接するメモリロケーションに）互いに近くに格納され（クラスタ化され）うる。このようなクラスタリングは、クエリプロセッサが、コンプリーショントークンに対する可能性のあるコンプリーション要素を決定するために、コンプリーション辞書にアクセスする場合に、連続的なメモリアクセスを容易にし、また、コンプリーション辞書にアクセスする場合のランダムメモリアクセスを低減又は排除する。
【０１４９】
[0157]  例えば、ドキュメントネームスペース”ａｂｃｄ”に対するインデックストークン”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”をより効率的に識別することができる。
【０１５０】
[0158]  プレフィックスされたインデックストークンの辞書順ソートの結果として、コンプリーション辞書のプレフィックスされたインデックストークンがメモリ内で互いに近くに格納されることに加えて、ソートされたプレフィックスされたインデックストークンに関連付けられるコンプリーション辞書の、対応する登録リストの格納場所へのポインタ（例えばアドレス）もまた、プレフィックスされたインデックストークンの辞書順ソートの結果として、メモリ内で互いに近くに格納されうる。特に、プレフィックスされたインデックストークンに対する登録リストの格納場所へのポインタは、メモリ内のプレフィックスされたインデックストークンの近くに格納されうる。例えば、ポインタとプレフィックスされたインデックストークンとは、同一のメモリブロック、若しくは、連続する又は隣接するメモリブロックの同じ組に格納されうる。従って、クエリプロセッサが、例えば、ドキュメントネームスペース”abcd”内のコンプリーショントークン”con”に対してあり得るコンプリーション要素として、インデックストークン”concession”、”conclude”、”conclusion”、”concrete”及び”concurrent”をより効率的に識別することができるだけでなく、クエリプロセッサはまた、辞書順ソートの結果として、これらのインデックストークンに対応する登録リストの格納場所をより効率的に識別することができる。
【０１５１】
[0159]  本発明のいくつかの実施形態では、プレフィックスされたインデックストークンの辞書順にコンプリーション辞書のプレフィックスされたインデックストークンをソートすることは、各レコードが、プレフィックスされたインデックストークンと、プレフィックスされたインデックストークンに対する登録リストが格納された、揮発性又は不揮発性メモリの場所へ関連付けられたポインタと、を含むコンプリーション辞書の複数のレコード（データ構造）をソートすることを含む。複数のレコードは、プレフィックスされたインデックストークンの辞書順に従ってソートされうる。そして、ソートされたレコードは、連続した又は隣接したコンピュータメモリ（例えば揮発性メモリ又は不揮発性メモリ）のブロックに格納されうる。
【０１５２】
[0160]  以降の説明は、プロセッサの制御下で１つ以上のコンピューティングデバイスの動作を行わせる、コンピュータで実行可能な命令を用いて実施されうる方法のステップを示す。コンピュータで実行可能な命令は、ＣＤ、ＤＶＤ、フラッシュメモリ等のコンピュータで読み取り可能な記録媒体に格納されうる。コンピュータで実行可能な命令はまた、例えば、インターネット上の記憶場所（例えば、ウェブサーバ）からダウンロード及びインストールするための、ダウンロード可能で、コンピュータで実行可能な命令のセットとして格納されうる。
【０１５３】
[0161]  方法のステップに対する所定の順序が図及び以降の説明から暗示され得る一方で、文脈が明確に示さない限り、当該方法のステップは示され且つ／又は説明されたものとは異なる順序で実行されうることが理解されるだろう。更に、文脈が明確に示さない限り、方法のステップは、互いに並行して（同時に）実行され得る。
【０１５４】
＜個人用検索のための処理＞
[0162]  図６は、本発明の実施形態に従って、マルチユーザ検索システム３２０のサービングシステム３２５によって実行される個人用検索の処理６００を示すフロー図である。
【０１５５】
[0163]  ステップ６０２において、以下で説明されるように、フロントエンドサーバ３２６Ａによって、検索クエリ３３２Ａが認証されたユーザのエンドユーザコンピューティングデバイス３１１Ａから取得される。検索クエリ３３２Ａは、コンプリーションクエリ又は非コンプリーションクエリでありうる。
【０１５６】
[0164]  ステップ６０４において、フロントエンドサーバ３２６Ａは、以下で説明されるように、検索するための１つ以上の認証されたドキュメントネームスペースの１つ以上の識別子を決定する。そして、フロントエンドサーバ３２６Ａは、以下で説明されるように、クエリ３３２Ａと、検索するための１つ以上の認証されたドキュメントネームスペースの１つ以上の識別子とを、ルーティングサーバ４２０Ａに転送する。
【０１５７】
[0165]  ステップ６０６において、ルーティングサーバ４２０Ａは、以下で説明されるように、クエリ３３２Ａがルーティングされるべき１つ以上のインデックスサーバ４３０を決定する。どのインデックスサーバ４３０にクエリ３３２Ａをルーティングするかを決定するための、ルーティングサーバ４２０Ａによって実行される本発明のいくつかの実施形態における処理は、以下及び図７に関して以降で説明されるようであってよい。
【０１５８】
[0166]  ステップ６０８において、ルーティングサーバ４２０Ａは、以下で説明されるように、ステップ６０６においてクエリ３３２Ａをルーティングするように決定された１つ以上のインデックスサーバ４３０のそれぞれに、クエリ３３２Ａをルーティングする。
【０１５９】
[0167]  ステップ６１０において、以下で説明されるように、クエリ３３２Ａは、ステップ６０８においてクエリ３３２Ａがルーティングされた１つ以上のインデックスサーバ４３０のそれぞれにおける、クエリプロセッサ３２７によって処理される。上述したように、検索クエリ３３２Ａは、コンプリーションクエリ又は非コンプリーションクエリでありうる。クエリ３３２Ａが非コンプリーションクエリである場合に、クエリ３３２Ａに対する個別化された回答（例えば４１８）を生成するための、インデックスサーバ（例えば４３０）においてクエリプロセッサ３２７によって実行される本発明のいくつかの実施形態における処理は、以下及び図8に関して以降で説明されるようであってよい。クエリ３３２Ａがコンプリーションクエリである場合に、クエリ３３２Ａに対する個別化された回答（例えば４１８）を生成するための、インデックスサーバ（例えば４３０）においてクエリプロセッサ３２７によって実行される本発明のいくつかの実施形態における処理は、以下及び図９に関して以降で説明されるようであってよい。
【０１６０】
[0168]  ステップ６１２において、以下で説明されるように、ルーティングサーバ４２０Ａは、ステップ６０８においてクエリ３３２Ａがルーティングされたインデックスサーバ４３０のそれぞれからの、クエリ３３２Ａに対する個別化された回答（例えば４１８Ａ）を受信してもよい。クエリ３３２Ａがステップ６０８において複数のインデックスサーバ４３０にルーティングされた場合、ルーティングサーバ４２０Ａは、ステップ６１２において複数の対応する個別化された回答４１８を受信してもよい。
【０１６１】
[0169]  ステップ６１２においてルーティングサーバ４２０Ａが複数の個別化された回答４１８を受信した場合、ステップ６１４においてルーティングサーバ４２０Ａは、以下で説明されるように、複数の個別化された回答を、その後フロントエンドサーバ３２６Ａへ返信される、１つの個別化された回答３３４Ａに統合してもよい。
【０１６２】
[0170]  ステップ６１６において、以下で説明されるように、フロントエンドサーバ３２６Ａは、クエリ３３２Ａを送信したエンドユーザコンピューティングデバイス３１１Ａへ、クエリ３３２に対する個別化された回答３３４Ａを返す。
【０１６３】
＜決定論的なクエリのルーティング＞
[0171]  図７は、本発明のいくつかの実施形態に従って、所定のドキュメントネームスペースに属すドキュメント３４０をインデックス化するインデックスシャード（例えば３２８Ｂ）を格納するインデックスサーバ（例えば４３０）を決定する、ルーティングサーバ４２０Ａによって実行される処理７００を示すフロー図である。
【０１６４】
[0172]  ステップ７０２において、ルーティングサーバ４２０Ａは、検索するための認証されたドキュメントネームスペースのそれぞれに対する識別子を取得する。例えば、ルーティングサーバ４２０Ａは、クエリ３３２Ａをも含む、フロントエンドサーバ３２６Ａから受信したネットワーク要求において識別子を取得してもよい。
【０１６５】
[0173]  ステップ７０４において、ルーティングサーバ４２０Ａの決定論マッピング機能４１６は、認証されたドキュメントネームスペースの識別子のそれぞれにハッシュアルゴリズム（例えばメッセージダイジェストアルゴリズム）を適用して、以下に説明するように、認証されたドキュメントネームスペースの識別子のそれぞれに対してハッシュ値ｈｖを生成する。あらゆる数の異なるハッシュアルゴリズムを用いてよい。しかし、用いられるハッシュアルゴリズムは、ハッシュアルゴリズムが所定の認証されたドキュメントネームスペースの識別子に対して同一のハッシュ値を矛盾なく出力するという意味で決定論的でなければならない。ステップ７０４において使用されてよい、いくつかの適切なハッシュアルゴリズムの非限定的な例は、ＭＤ４、ＭＤ５、ＳＨＡ−１及びＳＨＡ−２メッセージダイジェストアルゴリズムを含む。
【０１６６】
[0174]  ステップ７０６において、検索するための認証されたドキュメントネームスペースのそれぞれに対し、ルーティングサーバ４０２Ａの決定論マッピング機能４１６は、以下で説明するように、認証されたドキュメントネームスペースに対してステップ７０４で計算したハッシュ値ｈｖを係数ｋによって除算した余りｒを計算する。
【０１６７】
[0175]  ステップ７０８において、検索するための認証されたドキュメントネームスペースのそれぞれに対し、ルーティングサーバ４０２Ａの決定論マッピング機能４１６は、以下で説明するように、認証されたドキュメントネームスペースに対してステップ７０６で計算した余りｒがエントリのキーの範囲内である、マッピング４１７内のマッピングエントリを識別する。上述したように、マッピング４１７はキーと値とを含んでよい。エントリのキーは、０からｋ−１の範囲内で連続する値のサブレンジ（sub-range）を定義してもよい。エントリの値は、インデックスサーバ（例えば４３０Ｂ）のホスト名およびネットワークアドレスの少なくともいずれかを含んでよい。例えば、エントリの値は、インデックスサーバのホスト名又はネットワークアドレスを含んでもよい。ここで、ルーティングサーバ４２０Ａは、他の様々な情報にクエリ３３２Ａを含んだネットワーク要求を生成し、インデックスサーバへ送信してよい。
【０１６８】
[0176]  ステップ７１０において、ステップ７０８で識別したインデックスサーバのそれぞれに対し、ルーティングサーバ４２０Ａは、以下に説明するように、クエリ３３２Ａをインデックスサーバへルーティングする。
【０１６９】
＜非コンプリーションクエリの処理＞
[0177]  図８は、本発明のいくつかの実施形態に従って、クエリ３３２Ａが非コンプリーションクエリである場合に、クエリ３３２Ａに対する個別化された回答（例えば４１８）を生成するための、インデックスサーバ（例えば４３０）におけるクエリプロセッサ３２７によって実行される処理８００を示すフロー図である。クエリ３３２Ａは、ネットワーク要求においてルーティングサーバ（例えば４２０Ａ）から受信されてよい。ネットワーク要求はまた、検索するための１つ以上の認証されたドキュメントネームスペースの１つ以上の識別子を含んでよい。加えて、そのような認証されたドキュメントネームスペースの識別子のそれぞれは、ネットワーク要求内で、ドキュメントネームスペースが属すドキュメントネームスペースのグループの識別子と関連付けられ得る。
【０１７０】
[0178]  ステップ８０２において、インデックスサーバのクエリプロセッサ３２７は、アクセスするためのインデックスサーバにおけるインデックスシャード（例えば３２０Ｂ）の１つ以上のインデックスを決定する。そのような各インデックスは、インデックスデータベースファイル３５１内に、インデックスサーバの不揮発性メモリ（例えばフラッシュメモリ）に格納された辞書（例えば５１０）と対応する登録（例えば５２０）を含む。そのような各インデックスはまた、揮発性メモリの構成要素を有してもよい。例えば、インデックスの辞書は、インデックスサーバの揮発性メモリに格納されてもよい。加えて、インデックスの登録からの様々な登録リストは、インデックスサーバの揮発性メモリに時々キャッシュされてもよい。クエリプロセッサ３２７は、キャッシュされた登録リストを、キャッシュ退避ポリシー（例えばＬＲＵ）に従って、揮発性メモリから退避してよい。
【０１７１】
[0179]  いくつかの実施形態に従って、インデックスのインデックスデータベースファイル３５１は変更不可能なものとして扱われ、インデックスへの更新はインデックスサーバの揮発性メモリに格納される。この更新は、ドキュメント３４０がインデックスにインデックス化されるべき新たなインデックストークンと、ドキュメント３４０がもはやインデックスにインデックス化されるべきでないインデックストークンとを含んでよい。より具体的に、インデックスサーバにおける揮発性メモリに格納されるインデックスのインデックストークンに対する”デルタ（delta）”登録リストは、インデックスのインデックスデータベースファイル３５１に格納されたインデックストークンに対する”基礎（base）”登録リストへの更新を反映してよい。
【０１７２】
[0180]  例えば、インデックスサーバ（例えば４３０Ａ）におけるインデックスのインデックスデータベースファイル３５１が、”solved”、”two”及び”problem”のトークンによってドキュメントＤ２をインデックス化しているとする。この場合、インデックスデータベースファイル３５１は、個々が”solved”、”two”及び”problem”のインデックストークンのそれぞれに対するものである、３つの基礎登録リスト（base  posting list）を含んでよい。次に、ドキュメントＤ２が編集されて、”solved two problems”から”solved three problems”に置き換えられたとする。次に、インデックスサーバは、ドキュメントＤ２が、もはやインデックストークン”two”によってインデックス化されるべきではなく、現在はインデックストークン”three”によってインデックス化されるべきであることを特定する、１つ以上のインデックス変形３５２を受信するものとする。これらの変形３５２を表すため、インデックストークン”two”に対するデルタ登録リストがインデックスサーバの揮発性メモリに格納されて、ドキュメントＤ２がもはやインデックストークン”two”によってインデックス化されるべきではないことを（例えば削除ビットベクトルを用いて）表してよく、そして、インデックストークン”three”に対する他のデルタ登録リストがインデックスサーバの揮発性メモリに格納されて、ドキュメントＤ２がインデックストークン”three”によってインデックス化されるべきであることを（例えば、登録リスト内のドキュメントＤ２の識別子を含むことによって）表してよい。これらの変形３５２を表すために、インデックスデータベースファイル３５１を修正する必要がない。クエリ（例えば３３２Ａ）を処理する場合、インデックスサーバのクエリプロセッサ３２７は、（ＲＡＭにキャッシュされていてよい）インデックスデータベースファイル３５１内の所定のクエリトークンに対する基礎登録リストと、揮発性メモリに格納された所定のクエリトークンに対するデルタ登録リストとの両方を情報交換してよい。クエリプロセッサ３２７は、デルタ登録リストと基礎登録リストとをマージして、所定のクエリトークンを満たすドキュメントを決定してよい。
【０１７３】
[0181]  いくつかの実施形態に従って、インデックスサーバのクエリプロセッサ３２７は、ステップ８０２において、ルーティングサーバ４２０Ａからのネットワーク要求内の、ドキュメントネームスペースのグループの識別子に基づいて、アクセスするインデックスを決定する。例えば、クエリプロセッサ３２７は、ルーティングサーバ４２０Ａからのネットワーク要求内の、ドキュメントネームスペースのグループの識別子に基づいて、特定のインデックスデータベースファイル３５１及び揮発性メモリ内の特定のデータ構造（例えば辞書、登録リストなど）の少なくともいずれかへのアクセスを決定してよい。
【０１７４】
[0182]  ステップ８０４において、ステップ８０２において決定したアクセスするための各インデックスに対して、インデックスから、クエリ３３２Ａ内のクエリトークンのための登録リストが読み出される。このような読み出しは、インデックスサーバにおける不揮発性メモリに格納された登録リストを検索して、インデックスサーバにおける揮発性メモリ内にこの登録リストを格納することを含んでよい。いくつかの場合には、登録リストは、インデックスサーバにおける揮発性メモリに既に格納（キャッシュ）されていてもよい。この場合、インデックスサーバにおける不揮発性メモリから登録リストを検索する必要はないかもしれない。
【０１７５】
[0183]  ステップ８０６において、複数の登録リストがステップ８０４において読み出された場合、複数の登録リストは適宜マージされて、クエリ３３２Ａを満たす（一致する）１つ以上のドキュメントの１つ以上の識別子を含んでよい、１つの”結果”登録リストが生成される。クエリを満たす（一致する）ドキュメントを決定する目的に対して、様々な異なるアルゴリズムを登録リストをマージするために用いることができる。本発明の実施形態は、特定のマージアルゴリズムに何ら限定されない。１つの登録リストのみがステップ８０４において読み出された場合、例えば、クエリ３３２Ａ内には１つのクエリトークンしかないため、当該１つの読み出された登録リストが結果登録リストとなってよい。
【０１７６】
[0184]  ステップ８０８において、インデックスサーバのクエリプロセッサ３２７は、ランキングアルゴリズムに従って、クエリ３３２Ａと一致する、結果登録リスト内のドキュメントをランクで順番付けする。ランキングアルゴリズムは、クエリ３３２Ａに関して一致するドキュメントのそれぞれについてランキングスコアを計算することを含んでよい。種々の異なるランキングアルゴリズムが使用されてよく、本発明の実施形態はあらゆる特定のランキングアルゴリズムに限定されない。例えば、このランキングアルゴリズムは、クエリトークンと一致するドキュメントとに対する、クエリ依存型メトリクス及びクエリ非依存型メトリクスの少なくともいずれかに基づいて、ランキングスコアを計算してもよい。
【０１７７】
[0185]  ステップ８１０において、インデックスサーバのクエリプロセッサ３２７は、クエリ３３２Ａに対する個別化された回答（例えば４１８Ａ）を生成し、ルーティングサーバ４２０Ａへネットワーク応答において回答を送信する。個別化された回答は、検索するための認証されたドキュメントネームスペースに属す、一致するドキュメントのみを特定してよい。このことを容易にするため、結果登録リスト内で特定された一致するドキュメントのそれぞれは、一致するドキュメントが属すドキュメントネームスペースの識別子と関連付けられてよい。インデックスサーバのクエリプロセッサ３２７は、ドキュメントが個別化された回答のなかから特定されるべきかを判定するために、一致するドキュメントのドキュメントネームスペースの識別子と、ルーティングサーバ４２０Ａからのネットワーク要求に含まれる、認証されたドキュメントネームスペースの識別子のセットとを比較してよい。この比較において、一致するドキュメントが認証されたドキュメントネームスペースに属す場合、一致するドキュメントは個別化された回答から特定されてよい。そうでない場合、一致するドキュメントは、個別化された回答において特定され得ない。
【０１７８】
＜コンプリーションクエリの処理＞
[0186]  図９は、本発明のいくつかの実施形態に従って、クエリ３３２Ａがコンプリーションクエリである場合に、クエリ３３２Ａに対する個別化された回答（例えば４１８）を生成するための、インデックスサーバ（例えば４３０）におけるクエリプロセッサ３２７によって実行される処理９００を示すフロー図である。
【０１７９】
[0187]  コンプリーションクエリ３３２Ａは、ネットワーク要求においてルーティングサーバ（例えば４２０Ａ）から受信されてよい。ネットワーク要求はまた、検索するための１つ以上の認証されたドキュメントネームスペースの１つ以上の識別子を含んでよい。加えて、そのような認証されたドキュメントネームスペースの識別子のそれぞれは、ネットワーク要求内で、ドキュメントネームスペースが属すドキュメントネームスペースのグループの識別子と関連付けられ得る。加えて、ネットワーク要求は、コンプリーションクエリ３３２のどのクエリトークンがコンプリーショントークンであるかを示す或いは特定してよい。コンプリーションクエリ３３２Ａにおける任意の他のクエリトークンは、コンプリートトークンとして考慮される。
【０１８０】
[0188]  本発明のいくつかの実施形態に従って、インデックスサーバ（４３０Ｂ）におけるインデックスシャード（例えば３２８Ｂ）は、当該インデックスシャードに割り当てられた１つ以上のドキュメントネームスペースグループのそれぞれに対する、”コンプリーション（completion）”インデックスを含んでよい。そのような各コンプリーションインデックスは、コンプリーションインデックスのドキュメントネームスペースのグループに属す１つ以上のドキュメントネームスペースに、共にドキュメントをインデックス化するコンプリーション辞書と対応する登録を含んでよい。
【０１８１】
[0189]  本発明のいくつかの実施形態に従って、インデックスサーバ（４３０Ａ）のクエリプロセッサ３２７は、コンプリーションインデックスのドキュメントネームスペースのグループに属す、検索するための認証されたドキュメントネームスペースに対するコンプリーションクエリ３３２Ａを処理する場合に、ドキュメントネームスペースグループに対するコンプリーションインデックスにアクセスする。
【０１８２】
[0190]  本発明のいくつかの実施形態に従って、コンプリーションインデックスは、ドキュメントのファイル名のみをインデックス化する。すなわち、コンプリーション辞書のインデックストークンは、コンプリーションインデックスのドキュメントネームスペースグループに属す１つ以上のドキュメントネームスペースにおけるドキュメントのファイル名から抽出されたトークンに限定される。このようにして、コンプリーションインデックスのサイズが、全テキストのインデックス又はドキュメントネームスペースに対する他のインデックスより相対的に小さくなり得る。これにより、インデックスサーバのクエリプロセッサ３２７によってコンプリーションクエリ３３２のより効率的な処理を促進する一方で、同時にコンプリーションクエリ３３２に関連する回答４１８を提供できるようにする。
【０１８３】
[0191]  上述したように、コンプリーション辞書は、辞書順のソート順でソートされた、プレフィックスされたインデックストークンを含む。そのようなインデックストークンのそれぞれは、ドキュメントネームスペースの識別子にプレフィックスされたインデックストークンを含む。ソートされているプレフィックスされたインデックストークンは、揮発性メモリ及び不揮発性メモリの少なくともいずれかに、ソートされた順番で互いに近くに格納（クラスタ化）されてよい。このようにして、プレフィックスされたインデックストークンをソート順で繰り返すことは、繰り返しの間の逐次的なメモリアクセスを容易にし、繰り返しの間のランダムなメモリアクセスを減らし得る。これにより、インデックスサーバのクエリプロセッサ３２７が、共通のプレフィックスを共有するコンプリーション辞書においてプレフィックスされたインデックストークンのセットにわたって繰り返すことを、より効率化することができる。
【０１８４】
[0192]  ここで再び図９を参照すると、ステップ９０２において、インデックスサーバのクエリプロセッサ３２７は、１つ以上のコンプリーション辞書にアクセスする際に用いるための、コンプリーションクエリ３３２Ａのクエリトークンに対するインデックスキーを生成する。一般に、インデックスキーは、コンプリーション辞書内のプレフィックスされたインデックストークンの形式と一致する形式で、認証されたドキュメントネームスペースの識別子を用いてクエリトークンをプレフィックスすることによって生成される。例えば、コンプリーション辞書内のプレフィックスされたインデックストークンの形式が＜ドキュメントネームスペースの識別子＞：＜インデックストークン＞である場合、生成されるインデックスキーの形式は、＜認証されたドキュメントネームスペースの識別子＞：＜クエリトークン＞の形式であってよい。
【０１８５】
[0193]  ステップ９０２において、インデックスサーバのクエリプロセッサ３２７は、各クエリトークンに対する複数のインデックスキーであって、検索するための複数の認証されたドキュメントネームスペースの識別子のそれぞれに対するインデックスキーを生成してよい。ここで、検索するための認証されたドキュメントネームスペースのそれぞれは、インデックスサーバのインデックスシャードに割りあてられる。
【０１８６】
[0194]  ステップ９０４−９１６は、ルーティングサーバ４２０Ａからのネットワーク要求において特定される、検索するための認証された各ドキュメントネームスペースに対して、インデックスサーバのクエリプロセッサ３２７によって実行されてよい。
【０１８７】
[0195]  ステップ９０４において、所定の検索するための認証されたドキュメントネームスペースに対し、コンプリーションクエリ３３２Ａの任意のコンプリートトークンについてステップ９０２で生成された、任意のインデックスキーを用いて、所定の認証されたドキュメントネームスペースが属すドキュメントネームスペースのグループに対するコンプリーション辞書にアクセスする。特に、インデックスキーに関連付けられた登録リストは、コンプリーションクエリ３３２Ａのコンプリートトークンに対して読み出される。
【０１８８】
[0196]  ステップ９０６において、所定の検索するための認証されたドキュメントネームスペースに対し、ステップ９０４でコンプリートトークンについて読み出された任意の登録リストがマージされ、コンプリーションクエリ３３２Ａのコンプリートトークンに対する”結果”登録リストが生成される。
【０１８９】
[0197]  ルーティングサーバ４２０Ａからのネットワーク要求で特定される、検索するための認証されたドキュメントネームスペースのそれぞれに対して実行されるステップ９０８−９１６に加え、ステップ９０８−９１６は、コンプリーションクエリ３３２Ａにおけるコンプリーショントークンに対して可能性のあるコンプリーションとして、コンプリーション辞書内で識別される複数の可能性のあるコンプリーショントークンのそれぞれに対して実行されてよい。
【０１９０】
[0198]  認証されたドキュメントネームスペースに対して実行されるステップ９０８−９１６は、一般に、コンプリーショントークンのために生成されたインデックスキーを用いてコンプリーション辞書にアクセスすることと、複数のプレフィックスされたインデックストークンの辞書順で、複数のプレフィックスされたインデックストークンにわたって、停止条件に至るまで繰り返すことを含む。認証されたドキュメントネームスペースにわたって繰り返された、複数のプレフィックスされたインデックストークンのそれぞれは、プレフィックスとして認証されたドキュメントネームスペースの識別子、サフィックスとしてのインデックストークン、及び、プレフィックスである又はインデックストークンと一致するコンプリーショントークンを含んでよい。繰り返しの間はまた、複数のプレフィックスされたインデックストークンの各プレフィックスされたインデックストークンに対し、プレフィックスされたインデックストークンと関連付けられた登録リスト内で識別される任意のドキュメントがコンプリーションクエリを満たすかを判定する。コンプリーションクエリを満たす登録リスト内のドキュメントに対する情報は、コンプリーションクエリに対する回答に返されてよい。いくつかの実施形態では、プレフィックスされたインデックストークンは、ドキュメントのファイル名からのものであり、ドキュメントに対するコンプリーションクエリについての回答において返答される情報は、ドキュメントのファイル名である。
【０１９１】
[0199]  本発明のいくつかの実施形態では、プレフィックスされたインデックストークンの辞書順で、複数のプレフィックスされたトークンにわたって繰り返す代わりに、プレフィックスされたインデックストークンは、対応する登録リストのサイズの減少順において繰り返す。ここで、登録リストのサイズは登録リストにおいて識別されたドキュメントの数によって決定される。プレフィックスされたインデックストークンをこの順番で繰り返すことにより、大部分のドキュメントがこれによりインデックスされる、コンプリーショントークンに対して可能性のあるコンプリーションが、コンプリーションクエリに対する回答に包含されるかをまず考慮にいれる。
【０１９２】
[0200]  この繰り返しを容易にするため、補助的なネームスペースのトークンごとの頻度マッピング（per-namespace token-frequency mapping）がインデックスサーバにおいて維持されてよい。このマッピングの各エントリは、キー(key)と対応する値（value）とを含む。このような各キーはインデックストークンを含み、このような値のそれぞれは、インデックストークンとドキュメントネームスペースに対するコンプリーション辞書内の登録リストのサイズを含む。補足的なマッピングのエントリは、マッピング内でエントリーキーのインデックストークンの辞書順でソートされ、揮発性メモリ及び不揮発性メモリの少なくともいずれかの隣接する位置に、ソートされた順番で格納（クラスタ化）されてよい。これは、インデックスサーバのクエリプロセッサ３２７が、コンプリーションクエリ３３２Ａ内のコンプリーショントークンと一致する共通のプレフィックスを共有する、補足的なマッピング内の全てのインデックストークンをより効率的に識別することを可能にする。ひとたび全てのこのようなインデックストークンが識別されれば、これらは、補足的なマッピングのおいてエントリ値で特定される登録リストのサイズの減少順でソートされる。インデックストークンのソート順の結果は、コンプリーション辞書にアクセスし、コンプリーショントークンに対して可能性のあるコンプリーションを考慮する際の、インデックストークンに対する繰り返しの順序である。補足的なマッピングはインデックストークンに対して実際の登録リストを格納しないため、この補足的なマッピングは、コンプリーションインデックスのバイト数に関して、サイズにおいてずっと小さくなってよい。結果として、インデックストークンに対する繰り返しの順序は、繰り返しの順がコンプリーションインデックスそのものから決定されれば、より少ないメモリＩ／Ｏ動作を用いる付加的なマッピングから決定することができる。
【０１９３】
[0201]  ステップ９０８において、クエリプロセッサ３２７は、繰り返しの順で、コンプリーショントークンに対する可能性のあるコンプリーションである次のインデックストークンを決定する。説明したように、繰り返しの順は、コンプリーショントークンと一致する共通のプリフィックスを共有するインデックストークンの辞書順に基づく、又は、インデックストークンに対する登録リストのサイズの減少順に基づくことができる。
【０１９４】
[0202]  ステップ９１０において、クエリプロセッサ３２７は、繰り返しの中のステップ９０８において決定されたクエリ３３２Ａ内のコンプリーショントークンに対する現在の可能性のあるコンプリーショントークンについての登録リストを読み出す。いくつかの場合には、現在の可能性のあるコンプリーショントークンについての登録リストは、インデックスサーバにおける揮発性メモリに既に格納されていてもよい。この場合、不揮発性メモリから登録リストを検索する必要はないかもしれない。
【０１９５】
[0203]  ステップ９１２において、コンプリーションクエリ３３２Ａに任意のコンプリートトークンがあった場合、ステップ９０６において決定されたコンプリートトークンについての結果登録リストは、繰り返しの中のステップ９１０において決定されたコンプリーショントークンに対する現在の可能性のあるコンプリーショントークンについての登録リストにマージされる。このマージから生じるコンプリーションクエリ３３２Ａに対するこの現在の”結果”登録リストは、コンプリーションクエリ３３２Ａを満たす、認証されたドキュメントネームスペース内の１つ以上のドキュメントの識別子を含んでよい。ここで、コンプリーショントークンは、現在の可能性のあるコンプリーショントークンで置き換えられる。コンプリーションクエリ３３２Ａに任意のコンプリートトークンがなかった場合、コンプリーションクエリ３３２Ａに対する現在の結果登録リストは、繰り返しの中のステップ９１０における現在の可能性のあるコンプリーショントークンに対する登録リストでありうる。
【０１９６】
[0204]  ステップ９１４において、コンプリーションクエリ３３２Ａに対する現在の結果登録リストが空でない（例えば、認証されたドキュメントネームスペースにおいて少なくとも１つのドキュメントが識別される）場合、コンプリーションクエリ３３２Ａに対する現在の結果登録リスト内で識別される各ドキュメントの情報は、コンプリーションクエリ３３２Ａに対する回答（例えば４１８Ａ）において送信されてよい。いくつかの実施形態では、この情報は、ドキュメントのファイル名を含む。
【０１９７】
[0205]  いくつかの実施形態に対し、ドキュメントのファイル名は、コンプリーションクエリ３３２Ａに対する回答（例えば４１８Ａ）において返信され、現在の可能性のあるコンプリーショントークンで置き換えられたコンプリーショントークンを有するコンプリーションクエリ３３２Ａは、コンプリーションクエリ３３２Ａに対する現在の結果登録リストが空でない場合に、コンプリーションクエリ３３２Ａに対する回答（例えば４１８Ａ）において戻される。いずれの場合も、コンプリーションクエリ３３２Ａに対する回答（例えば４１８Ａ）において戻る情報は、ユーザによる選択と他のクエリ３３２Ａとしてのサービングシステム３２５への送信のために、最終的にエンドユーザコンピューティングデバイスに提示されてよい。
【０１９８】
[0206]  ステップ９１６において、インデックスサーバのクエリプロセッサ３２７は、コンプリーションクエリ３３２Ａのコンプリーショントークンに対する、可能性のあるコンプリーショントークンにわたる繰り返しを継続するかを判定する。いくつかの実施形態に従って、クエリプロセッサ３２７は、停止条件が成立した場合に繰り返しを停止する。いくつかの実施形態に従って、停止条件は、任意の以下の条件が真になった場合に成立する。
・可能性のあるコンプリーショントークンで置き換えられたコンプリーションクエリ３３２Ａにおいて、コンプリーショントークンを有するコンプリーションクエリ３３２Ａを満たすドキュメントの閾値数が特定されている、
・可能性のあるコンプリーショントークンの閾値数が考慮されている、又は、
・クエリ実行タイマの時間を経過している。
【０１９９】
[0207]  ステップ９１６において停止条件が成立したと判定した場合、コンプリーションクエリ３３２Ａにおけるコンプリーショントークンに対する可能性のあるコンプリーショントークンについての繰り返しを終了する。そうでない場合、ステップ９０８において、次の可能性のあるコンプリーショントークンを用いて繰り返しが再び継続する。
【０２００】
[0208]  コンプリーションクエリを処理する上述した処理は、エンドユーザに多くの利益を提供する。１つは、この処理は、興味のあるドキュメントを識別する回答をユーザが受信するために要する時間を低減することができる。他には、この処理は、興味のあるドキュメントを見つけるためにユーザが検索フィールドに入力するキーストロークの数を低減することができる。更に他の理由は、この処理は、ユーザがトークンの正しいスペルを覚えておく負担を抑制することができる。
【０２０１】
[0209]  いくつかの実施形態のおいて、上述した処理は、ドキュメントのファイル名に対する、個人用の検索クエリの自動コンプリーションを提供したが、上述した処理は、他の実施形態においてドキュメントコンテンツに対して、個人用の検索クエリの自動コンプリーションを提供する。
【０２０２】
＜拡張及び代替例＞
[0210]  本発明は、１つの好ましい実施形態と所定の代替形態への特定の参照と共にいくつかの詳細を説明したが、本発明を特定の実施形態やこれらの特定の代替形態に限定する意図はない。従って、当業者は、当該好ましい実施形態に本発明の開示から離れること無く変形がなされてもよいことを理解するであろう。
【図１】
0006487029.tif 000002
【図２】
0006487029.tif 000003
【図３】
0006487029.tif 000004
【図４】
0006487029.tif 000005
【図５】
0006487029.tif 000006
【図６】
0006487029.tif 000007
【図７】
0006487029.tif 000008
【図８】
0006487029.tif 000009
【図９】
0006487029.tif 000010