(57)【特許請求の範囲】
【請求項１】
１つまたは複数のコンピューティング・デバイスによって、複数のノードとそれらノードをつなぐ複数のエッジとを含むソーシャル・グラフにアクセスすることであって、２つのノード間の各エッジが、該２つのノード間におけるそれぞれの分離の度合いを表し、前記複数のノードが、
オンライン・ソーシャル・ネットワークに関連付けられた第１のユーザに対応する第１のノードと、
前記オンライン・ソーシャル・ネットワークに関連付けられたオブジェクトに各々対応する複数の第２のノードと
を含む、前記ソーシャル・グラフにアクセスすること、
１つまたは複数のコンピューティング・デバイスによって、前記第１のユーザから検索クエリを受け取ること、
１つまたは複数のコンピューティング・デバイスによって、受け取られた前記検索クエリに基づいて、各々が接頭辞および接尾辞を含む１つまたは複数の検索語を決定することであって、各接頭辞が前記ソーシャル・グラフのエッジ・タイプとオブジェクト・タイプに対応し、各接尾辞が前記複数のノードのうちの特定のノードに対応する、前記１つまたは複数の検索語を決定すること、
１つまたは複数のコンピューティング・デバイスによって、前記検索語の各々について、
各検索語の接頭辞および接尾辞に基づいて第１の２進数を生成すること、
前記第１の２進数をハッシュすることによって、１つまたは複数のデータ・ストアから、前記各検索語の１つまたは複数の検索結果にアクセスして、該各検索語の１つまたは複数の検索結果を取り出すことであって、各検索結果が前記複数の第２のノードのうちの１つに対応する、前記１つまたは複数の検索結果を取り出すこと、
１つまたは複数のコンピューティング・デバイスによって、それぞれの前記検索語の検索結果を集約すること、
を備える方法。
【請求項２】
前記各検索語の接頭辞および接尾辞に基づいて第１の２進数を生成することは、１つまたは複数のコンピューティング・デバイスによって、
前記接頭辞に基づいて第２の２進数を生成すること、
前記接尾辞に対応するノードに対応するオブジェクトの特定のオブジェクト・タイプに基づいて第３の２進数を生成すること、
前記第２の２進数と前記第３の２進数とを連結することによって前記第１の２進数を生成すること、
をさらに含む、請求項１に記載の方法。
【請求項３】
前記第３の２進数の長さが、前記接尾辞のオブジェクト・タイプに基づいて決定される、請求項２に記載の方法。
【請求項４】
前記オブジェクトは、ユーザ、コンセプト、またはマップ・タイルに対応する、請求項１に記載の方法。
【請求項５】
ソーシャルネットワーキング・システムが、前記コンピューティング・デバイスおよび前記データ・ストアを含む、請求項１に記載の方法。
【請求項６】
１つまたは複数のコンピュータ読み取り可能非一時的記憶媒体であって、実行時に、
複数のノードとそれらノードをつなぐ複数のエッジとを含むソーシャル・グラフにアクセスすることであって、２つのノード間の各エッジが、該２つのノード間におけるそれぞれの分離の度合いを表し、前記複数のノードが、
オンライン・ソーシャル・ネットワークに関連付けられた第１のユーザに対応する第１のノードと、
前記オンライン・ソーシャル・ネットワークに関連付けられたオブジェクトに各々対応する複数の第２のノードと
を含む、前記ソーシャル・グラフにアクセスし、
前記第１のユーザから検索クエリを受け取り、
受け取られた前記検索クエリに基づいて、各々が接頭辞および接尾辞を含む１つまたは複数の検索語を決定することであって、各接頭辞が前記ソーシャル・グラフのエッジ・タイプとオブジェクト・タイプに対応し、各接尾辞が前記複数のノードのうちの特定のノードに対応する、前記１つまたは複数の検索語を決定し、
前記検索語の各々について、
各検索語の接頭辞および接尾辞に基づいて第１の２進数を生成し、
前記第１の２進数をハッシュすることによって、１つまたは複数のデータ・ストアから、前記各検索語の１つまたは複数の検索結果にアクセスして、該各検索語の１つまたは複数の検索結果を取り出すことであって、各検索結果が前記複数の第２のノードのうちの１つに対応する、前記１つまたは複数の検索結果を取り出し、
それぞれの前記検索語の検索結果を集約する、
ように動作可能なソフトウェアを具現化する記憶媒体。
【請求項７】
前記ソフトウェアは、前記各検索語の接頭辞および接尾辞に基づいて第１の２進数を生成することにおいて、実行時に、
前記接頭辞に基づいて第２の２進数を生成し、
前記接尾辞に対応するノードに対応するオブジェクトの特定のオブジェクト・タイプに基づいて第３の２進数を生成し、
前記第２の２進数と前記第３の２進数とを連結することによって前記第１の２進数を生成する、
ようにさらに動作可能である、請求項６に記載の記憶媒体。
【請求項８】
前記第３の２進数の長さが、前記接尾辞のオブジェクト・タイプに基づいて決定される、請求項７に記載の記憶媒体。
【請求項９】
前記オブジェクトは、ユーザ、コンセプト、またはマップ・タイルに対応する、請求項７に記載の記憶媒体。
【請求項１０】
ソーシャルネットワーキング・システムが、コンピューティング・デバイスおよび前記データ・ストアを含む、請求項６に記載の記憶媒体。
【請求項１１】
１つまたは複数のプロセッサと、
前記プロセッサに結合され、該プロセッサによって実行可能な命令を含む非一時的メモリと、
を備え、前記プロセッサは、前記命令の実行時に、
複数のノードとそれらノードをつなぐ複数のエッジとを含むソーシャル・グラフにアクセスすることであって、２つのノード間の各エッジが、該２つのノード間におけるそれぞれの分離の度合いを表し、前記複数のノードが、
オンライン・ソーシャル・ネットワークに関連付けられた第１のユーザに対応する第１のノードと、
前記オンライン・ソーシャル・ネットワークに関連付けられたオブジェクトに各々対応する複数の第２のノードと
を含む、前記ソーシャル・グラフにアクセスし、
前記第１のユーザから検索クエリを受け取り、
受け取られた前記検索クエリに基づいて、各々が接頭辞および接尾辞を含む１つまたは複数の検索語を決定することであって、各接頭辞が前記ソーシャル・グラフのエッジ・タイプとオブジェクト・タイプに対応し、各接尾辞が前記複数のノードのうちの特定のノードに対応する、前記１つまたは複数の検索語を決定し、
前記検索語の各々について、
各検索語の接頭辞および接尾辞に基づいて第１の２進数を生成し、
前記第１の２進数をハッシュすることによって、１つまたは複数のデータ・ストアから、前記各検索語の１つまたは複数の検索結果にアクセスして、該各検索語の１つまたは複数の検索結果を取り出すことであって、各検索結果が前記複数の第２のノードのうちの１つに対応する、前記１つまたは複数の検索結果を取り出し、
それぞれの前記検索語の検索結果を集約する、
ように動作可能である、システム。
【請求項１２】
前記プロセッサは、前記各検索語の接頭辞および接尾辞に基づいて第１の２進数を生成することにおいて、前記命令の実行時に、
前記接頭辞に基づいて第２の２進数を生成し、
前記接尾辞に対応するノードに対応するオブジェクトの特定のオブジェクト・タイプに基づいて第３の２進数を生成し、
前記第２の２進数と前記第３の２進数とを連結することによって前記第１の２進数を生成する、
ようにさらに動作可能である、請求項１１に記載のシステム。
【請求項１３】
前記第３の２進数の長さが、前記接尾辞のオブジェクト・タイプに基づいて決定される、請求項１２に記載のシステム。
【請求項１４】
前記オブジェクトは、ユーザ、コンセプト、またはマップ・タイルに対応する、請求項１１に記載のシステム。
【請求項１５】
ソーシャルネットワーキング・システムが、コンピューティング・デバイスおよび前記データ・ストアを含む、請求項１１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概して、ソーシャルネットワーキング・システムに関する。
【背景技術】
【０００２】
ソーシャルネットワーキング・ウェブサイトなどのソーシャルネットワーキング・システムは、そのユーザ（人または団体など）が、システムと対話したり、システムを通して互いに対話したりすることを可能にする。ソーシャルネットワーキング・システムは、ユーザからの入力によって、ユーザに関連付けられたユーザ・プロフィールをソーシャルネットワーキング・システム中に作成し格納することができる。ユーザ・プロフィールは、ユーザの人口統計情報、通信チャネル情報、および個人的な関心についての情報を含むことができる。また、ソーシャルネットワーキング・システムは、ユーザからの入力によって、ソーシャルネットワーキング・システムのユーザと他のユーザとの関係の記録を作成し格納するだけでなく、サービス（例えば、ウォール投稿、写真共有、イベント編成、メッセージング、ゲーム、または広告）を提供して、ユーザ間の社会的相互作用を促進することができる。
【０００３】
ソーシャルネットワーキング・システムは、そのサービスに関係するコンテンツまたはメッセージを、１つまたは複数のネットワークを介してユーザのモバイル・コンピューティング・デバイスなどに送信することができる。また、ユーザは、自分のモバイル・コンピューティング・デバイスなどにソフトウェア・アプリケーションをインストールして、ソーシャルネットワーキング・システム内の、自分のユーザ・プロフィールなどのデータにアクセスすることができる。ソーシャルネットワーキング・システムは、ユーザにつながっている他のユーザの集約された記事からなるニュースフィードなど、コンテンツ・オブジェクトの個人用セットを生成して、ユーザに表示することができる。
【発明の概要】
【０００４】
特定の実施形態は、検索語の構造に基づいてデータベースにインデックス付けを行うための方法を記載する。特定の実施形態では、２進数を用いて検索語を表し、２進数をハッシュすることによって検索語の検索結果にインデックス付けを行うことができる。検索語を表す２進数に固定長を使用する代わりに、特定の実施形態では、検索語ごとに各検索語の接頭辞および接尾辞を決定し、各検索語の接尾辞のオブジェクト・タイプに少なくとも部分的に基づいて各検索語を表す２進数の長さを決定することによって、２進数の長さを低減することができる。したがって、特定の実施形態では、検索語を表すより短い２進数を用いることにより、検索語にインデックス付けを行うためのハッシュ・テーブルのサイズを低減することができる。
【図面の簡単な説明】
【０００５】
【図１】ソーシャルネットワーキング・システムと関連付けられている例示的なネットワーク環境を示す図。
【図２】例示的なソーシャル・グラフを示す図。
【図３】検索語の構造に基づいてデータベースにインデックス付けするための例示的な方法を示す図。
【図４】例示的なコンピュータ・システムを示す図。
【発明を実施するための形態】
【０００６】
図１は、ソーシャルネットワーキング・システムに関連付けられた例示的なネットワーク環境１００を示す。ネットワーク環境１００は、ユーザ１０１、クライアント・システム１３０、ソーシャルネットワーキング・システム１６０、およびサードパーティ・システム１７０を含み、ネットワーク１１０によって互いに接続される。図１は、ユーザ１０１、クライアント・システム１３０、ソーシャルネットワーキング・システム１６０、サードパーティ・システム１７０、およびネットワーク１１０の特定の配置を示すが、本開示は、ユーザ１０１、クライアント・システム１３０、ソーシャルネットワーキング・システム１６０、サードパーティ・システム１７０、およびネットワーク１１０の任意の適切な配置を想定している。限定ではなく一例として、クライアント・システム１３０、ソーシャルネットワーキング・システム１６０、およびサードパーティ・システム１７０のうちの２つ以上は、互いに直接、ネットワーク１１０をバイパスして接続され得る。別の例として、クライアント・システム１３０、ソーシャルネットワーキング・システム１６０、およびサードパーティ・システム１７０のうちの２つ以上は、物理的または論理的に、全体的または部分的に互いに同じ場所に配置され得る。また、図１は、特定の数のユーザ１０１、クライアント・システム１３０、ソーシャルネットワーキング・システム１６０、サードパーティ・システム１７０、およびネットワーク１１０を示すが、本開示は、任意の適切な数のユーザ１０１、クライアント・システム１３０、ソーシャルネットワーキング・システム１６０、サードパーティ・システム１７０、およびネットワーク１１０を想定している。限定ではなく一例として、ネットワーク環境１００は、複数のユーザ１０１、クライアント・システム１３０、ソーシャルネットワーキング・システム１６０、サードパーティ・システム１７０、およびネットワーク１１０を含むことができる。
【０００７】
特定の実施形態において、ユーザ１０１は、ソーシャルネットワーキング・システム１６０と対話する、またはソーシャルネットワーキング・システム１６０を介して通信する、個人（人間のユーザ）、エンティティ（例えば、企業、ビジネス、もしくはサードパーティのアプリケーション）、またはグループ（例えば、個人もしくはエンティティの）であり得る。特定の実施形態において、ソーシャルネットワーキング・システム１６０は、オンライン・ソーシャル・ネットワークをホスティングする、ネットワークにアドレス可能なコンピューティング・システムであり得る。ソーシャルネットワーキング・システム１６０は、例えば、オンライン・ソーシャル・ネットワークに関係するユーザプロフィール・データ、コンセプトプロフィール・データ、ソーシャル・グラフ情報、または他の適切なデータなど、ソーシャルネットワーキング・データを生成、格納、受信、および送信することができる。ソーシャルネットワーキング・システム１６０は、直接またはネットワーク１１０を介してネットワーク環境１００の他の構成要素によってアクセスされ得る。特定の実施形態において、ソーシャルネットワーキング・システム１６０は、認証サーバ（または他の適切なコンポーネント）を含むことができる。認証サーバは、例えば、適切なプライバシー設定を設定することによって、ユーザ１０１に対し、ユーザのアクションをソーシャルネットワーキング・システム１６０によって記録させること、または他のシステム（サードパーティ・システム１７０など）と共有させることをオプトインまたはオプトアウトすることを可能にする。ユーザのプライバシー設定は、ユーザと関連付けられた何の情報が記録され得るか、ユーザと関連付けられた情報がどのように記録され得るか、ユーザと関連付けられた情報がいつ記録され得るか、ユーザと関連付けられた情報を誰が記録し得るか、ユーザと関連付けられた情報が誰と共有され得るか、およびユーザと関連付けられた情報が何の目的で記録または共有され得るかを決定することができる。認証サーバは、必要に応じて、ブロッキング、データ・ハッシング、匿名化、または他の適切な技術によって、ソーシャルネットワーキング・システム１６０の各ユーザの１つまたは複数のプライバシー設定を実施するために使用することができる。特定の実施形態において、サードパーティ・システム１７０は、ウェブサイトやアプリケーションをホスティングすることができる、ネットワークにアドレス指定可能なコンピューティング・システムとすることができる。サードパーティ・システム１７０は、例えば、ウェブページ、テキスト、画像、映像、音楽、またはアプリケーションなどのサードパーティ・システム・データを生成、格納、受信、および送信することができる。サードパーティ・システム１７０は、ネットワーク環境１００の他の構成要素によって、直接またはネットワーク１１０を介してアクセスされ得る。特定の実施形態において、１つまたは複数のユーザ１０１は、１つまたは複数のクライアント・システム１３０を使用して、ソーシャルネットワーキング・システム１６０またはサードパーティ・システム１７０にアクセスし、データを送信し、ソーシャルネットワーキング・システム１６０またはサードパーティ・システム１７０からデータを受信することができる。クライアント・システム１３０は、直接かまたはネットワーク１１０もしくはサードパーティ・システムを介して、ソーシャルネットワーキング・システム１６０またはサードパーティ・システム１７０にアクセスすることができる。限定ではなく一例として、クライアント・システム１３０は、ソーシャルネットワーキング・システム１６０を介してサードパーティ・システム１７０にアクセスすることができる。クライアント・システム１３０は、例えば、パーソナル・コンピュータ、ラップトップ・コンピュータ、セルラ電話、スマートフォン、またはタブレット・コンピュータなど、任意の適切なコンピューティング・デバイスであってよい。
【０００８】
本開示は、任意の適切なネットワーク１１０を想定している。限定ではなく一例として、ネットワーク１１０の１つまたは複数の部分は、アド・ホック・ネットワーク、イントラネット、エクストラネット、仮想プライベート・ネットワーク（ＶＰＮ）、ローカル・エリア・ネットワーク（ＬＡＮ）、ワイヤレスＬＡＮ（ＷＬＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、ワイヤレスＷＡＮ（ＷＷＡＮ）、メトロポリタン・エリア・ネットワーク（ＭＡＮ）、インターネットの一部分、公衆交換電話網（ＰＳＴＮ）の一部分、セルラ電話ネットワーク、またはこれらのうちの２つ以上の組合せを含むことができる。ネットワーク１１０は、１つまたは複数のネットワーク１１０を含むことができる。
【０００９】
リンク１５０は、クライアント・システム１３０、ソーシャルネットワーキング・システム１６０、およびサードパーティ・システム１７０を通信ネットワーク１１０に、または相互に接続することができる。本開示は、任意の適切なリンク１５０を想定している。特定の実施形態では、１つまたは複数のリンク１５０は、１つまたは複数の有線リンク（例えば、デジタル加入者線（ＤＳＬ）またはデータオーバーケーブルサービスインターフェイス仕様（ＤＯＣＳＩＳ）等）、無線リンク（例えば、Ｗｉ−Ｆｉ（登録商標）またはＷｉＭＡＸ（登録商標）等）、または光学リンク（例えば、同期型光ネットワーク（ＳＯＮＥＴ）または同期デジタルハイアラーキ（ＳＤＨ）等）を含む。特定の実施形態では、１つまたは複数のリンク１５０の各々は、アド・ホック・ネットワーク、イントラネット、エクストラネット、ＶＰＮ、ＬＡＮ、ＷＬＡＮ、ＷＡＮ、ＷＷＡＮ、ＭＡＮ、インターネットの一部、ＰＳＴＮの一部、セルラ技術によるネットワーク、衛星通信技術によるネットワーク、別のリンク１５０、または２つ以上のそのようなリンク１５０の組み合わせを含む。リンク１５０は、必ずしもネットワーク環境１００全体を通じて同一である必要はない。１つまたは複数の第１のリンク１５０は、１つまたは複数の第２のリンク１５０とは、１つまたは複数の点で異なっていてもよい。
【００１０】
図２は、例示的なソーシャル・グラフ２００を示す。特定の実施形態において、ソーシャルネットワーキング・システム１６０は、１つまたは複数のデータ・ストアに１つまたは複数のソーシャル・グラフ２００を格納することができる。特定の実施形態において、ソーシャル・グラフ２００は、複数のユーザ・ノード２０２または複数のコンセプト・ノード２０４を含み得る複数のノードと、それらノードをつなぐ複数のエッジ２０６とを含むことができる。図２に示される例示的なソーシャル・グラフ２００は、教示の目的で２次元の視覚的なマップ表示として示されている。特定の実施形態において、ソーシャルネットワーキング・システム１６０、クライアント・システム１３０、またはサードパーティ・システム１７０は、ソーシャル・グラフ２００、および適切なアプリケーションのための関連するソーシャル・グラフ情報にアクセスすることができる。ソーシャル・グラフ２００のノードおよびエッジは、例えば（ソーシャル・グラフ・データベースなどの）データ・ストアに、データ・オブジェクトとして格納され得る。こうしたデータ・ストアは、ソーシャル・グラフ２００のノードまたはエッジの１つまたは複数の探索可能または照会可能なインデックスを含むことができる。
【００１１】
特定の実施形態において、ユーザ・ノード２０２は、ソーシャルネットワーキング・システム１６０のユーザに対応することができる。限定ではなく一例として、ユーザは、ソーシャルネットワーキング・システム１６０と対話する、またはソーシャルネットワーキング・システム１６０を介して通信する、個人（人間のユーザ）、エンティティ（例えば、企業、ビジネス、もしくはサードパーティのアプリケーション）、またはグループ（例えば、個人もしくは企業の）であってよい。特定の実施形態において、ユーザがソーシャルネットワーキング・システム１６０にアカウントの登録をするとき、ソーシャルネットワーキング・システム１６０は、ユーザに対応するユーザ・ノード２０２を作成し、ユーザ・ノード２０２を１つまたは複数のデータ・ストアに格納することができる。本明細書において説明されるユーザおよびユーザ・ノード２０２は、必要な場合、登録されたユーザ、および登録されたユーザに関連付けられたユーザ・ノード２０２を指すことができる。これに加えて、または代替として、本明細書において説明されるユーザおよびユーザ・ノード２０２は、必要な場合、ソーシャルネットワーキング・システム１６０にまだ登録されていないユーザを指すことができる。特定の実施形態において、ユーザ・ノード２０２は、ユーザによって提供された情報、またはソーシャルネットワーキング・システム１６０を含む様々なシステムによって集められた情報に関連付けられ得る。限定ではなく一例として、ユーザは、自分の名前、プロフィール写真、コンタクト情報、生年月日、性別、婚姻状況、家族状況、職業、学歴、好み、関心、または他の人口統計情報を提供することができる。特定の実施形態において、ユーザ・ノード２０２は、ユーザのプライバシー設定に応じて、ユーザの１つまたは複数の画像から抽出された顔認識データと関連付けることができる。また、特定の実施形態において、ユーザ・ノード２０２は、ユーザに関連付けられた情報に対応する１つまたは複数のデータ・オブジェクトに関連付けることができる。特定の実施形態において、ユーザ・ノード２０２は１つまたは複数のウェブページに対応することができる。
【００１２】
特定の実施形態において、コンセプト・ノード２０４は、コンセプト（concept）に対応することができる。限定ではなく一例として、コンセプトは、場所（例えば、映画館、レストラン、ランドマーク、もしくは都市など）、ウェブサイト（例えば、ソーシャルネットワーキング・システム１６０に関連付けられたウェブサイトもしくはウェブアプリケーション・サーバに関連付けられたサードパーティ・ウェブサイトなど）、エンティティ（例えば、人、ビジネス、グループ、スポーツ・チーム、もしくは有名人など）、ソーシャルネットワーキング・システム１６０内もしくはウェブアプリケーション・サーバなど外部サーバ上に配置され得るリソース（例えば、オーディオ・ファイル、ビデオ・ファイル、デジタル・フォト、テキスト・ファイル、構造化ドキュメント、もしくはアプリケーションなど）、不動産もしくは知的財産（例えば、彫刻、絵画、映画、ゲーム、歌、アイデア、写真、もしくは著作など）、ゲーム、アクティビティ、アイデアもしくは理論、別の適切なコンセプト、または２つ以上のこうしたコンセプトに対応することができる。コンセプト・ノード２０４は、ユーザによって提供されたコンセプトの情報、またはソーシャルネットワーキング・システム１６０を含む様々なシステムによって集められた情報に関連付けられ得る。限定ではなく一例として、コンセプトの情報は、名前もしくは肩書き、１つもしくは複数の画像（例えば、書籍のカバー・ページの画像）、ロケーション（例えば、アドレスもしくは地理的ロケーション）、（ＵＲＬに関連付けられ得る）ウェブサイト、コンタクト情報（例えば、電話番号もしくはＥメール・アドレス）、他の適切なコンセプト情報、またはこうした情報の任意の適切な組合せを含むことができる。特定の実施形態において、コンセプト・ノード２０４は、コンセプト・ノード２０４に関連付けられた情報に対応する１つまたは複数のデータ・オブジェクトに関連付けられ得る。特定の実施形態において、コンセプト・ノード２０４は、１つまたは複数のウェブページに対応することができる。
【００１３】
特定の実施形態において、ソーシャル・グラフ２００中のノードは、（「プロフィール・ページ」と呼ばれることがある）ウェブページを表すことができ、またはこうしたウェブページによって表され得る。プロフィール・ページは、ソーシャルネットワーキング・システム１６０によってホスティングされてよく、またはソーシャルネットワーキング・システム１６０にアクセス可能としてもよい。また、プロフィール・ページは、サードパーティ・サーバ１７０に関連付けられたサードパーティ・ウェブサイト上でホスティングされ得る。限定ではなく一例として、特定の外部ウェブページに対応するプロフィール・ページは、その特定の外部ウェブページであってよく、プロフィール・ページは、特定のコンセプト・ノード２０４に対応することができる。プロフィール・ページは、他のユーザのすべてまたは選択されたサブセットによって閲覧可能であってよい。限定ではなく一例として、ユーザ・ノード２０２は、対応するユーザが、コンテンツを追加し、告知をし、あるいは自己紹介をすることができる、対応するユーザ・プロフィール・ページを有することができる。限定ではなく別の例として、コンセプト・ノード２０４は、特にコンセプト・ノード２０４に対応するコンセプトに対して、１または複数のユーザが、コンテンツを追加し、告知をし、または自己紹介をすることができる、対応するコンセプト・プロフィール・ページを有することができる。
【００１４】
特定の実施形態において、コンセプト・ノード２０４は、サードパーティ・システム１７０によってホスティングされたサードパーティ・ウェブページまたはリソースを表すことができる。サードパーティ・ウェブページまたはリソースは、他の要素の中に、アクションまたはアクティビティを表す（例えば、ＪａｖａＳｃｒｉｐｔ（登録商標）、ＡＪＡＸ、またはＰＨＰのコードで実装され得る）コンテンツ、選択可能もしくはその他のアイコン、または他の相互に動作可能なオブジェクトを含むことができる。限定ではなく一例として、サードパーティ・ウェブページは、「いいね！」、「チェックイン」、「たべる」、「おすすめ」、または別の適切なアクションまたはアクティビティなどの選択可能なアイコンを含むことができる。サードパーティ・ウェブページを閲覧しているユーザは、アイコンのうちの１つ（例えば「たべる」）を選択することによってアクションを行い、クライアント・システム１３０がソーシャルネットワーキング・システム１６０にユーザのアクションを示すメッセージを送信するようにさせることができる。メッセージに応じて、ソーシャルネットワーキング・システム１６０は、ユーザに対応するユーザ・ノード２０２と、サードパーティ・ウェブページまたはリソースに対応するコンセプト・ノード２０４との間にエッジ（例えば、「たべる」エッジ）を作成し、エッジ２０６を１つまたは複数のデータ・ストアに格納することができる。
【００１５】
特定の実施形態において、ソーシャル・グラフ２００における１対のノードは、１つまたは複数のエッジ２０６によって互いにつながっていてよい。１対のノードをつなぐエッジ２０６は、１対のノード間の関係を表すことができる。特定の実施形態において、エッジ２０６は、１対のノード間の関係に対応する１つまたは複数のデータ・オブジェクトまたは属性を含むまたは表すことができる。限定ではなく一例として、第１のユーザは、第２のユーザが第１のユーザの「友達」であることを示すことができる。この指標に応じて、ソーシャルネットワーキング・システム１６０は、「友達申請」を第２のユーザに送信することができる。第２のユーザが「友達申請」を承認する場合、ソーシャルネットワーキング・システム１６０は、ソーシャル・グラフ２００において第１のユーザのユーザ・ノード２０２と第２のユーザのユーザ・ノード２０２とをつなぐエッジ２０６を作成し、エッジ２０６をソーシャル・グラフ情報としてデータ・ストア２４の１つまたは複数に格納することができる。図２の例において、ソーシャル・グラフ２００は、ユーザ「Ａ」およびユーザ「Ｂ」の各ユーザ・ノード２０２間の友達関係を示すエッジ２０６、ならびにユーザ「Ｃ」およびユーザ「Ｂ」の各ユーザ・ノード２０２間の友達関係を示すエッジを含む。本開示では、特定のユーザ・ノード２０２をつなぐ特定の属性を有する特定のエッジ２０６について説明または示しているが、本開示は、ユーザ・ノード２０２をつなぐ任意の適切な属性を有する任意の適切なエッジ２０６を想定している。限定ではなく一例として、エッジ２０６は、交友関係、家族関係、ビジネスもしくは雇用関係、ファン関係、フォロワ関係、ビジタ関係、加入者関係、主従関係、相互関係、非相互関係、別の適切なタイプの関係、または２つ以上のこうした関係を表すことができる。また、本開示では、全般的にノードがつながっているものとして説明しているが、本開示はまた、ユーザまたはコンセプトがつながっているものとしても説明される。本明細書において、ユーザまたはコンセプトがつながっているということへの言及は、必要な場合、こうしたユーザまたはコンセプトに対応するノードが、１つまたは複数のエッジ２０６によって、ソーシャル・グラフ２００においてつながっていることを指すことができる。
【００１６】
特定の実施形態において、ユーザ・ノード２０２とコンセプト・ノード２０４との間のエッジ２０６は、コンセプト・ノード２０４に関連付けられたコンセプトに向かうユーザ・ノード２０２に関連付けられたユーザによって行われる特定のアクションまたはアクティビティを表すことができる。限定ではなく一例として、図２に示されるように、ユーザは、コンセプトに対して「いいね！」、「通った」、「プレイした」、「聴いた」、「料理した」、「勤務した」、または「観た」として表すことができ、その各々はエッジのタイプまたはサブタイプに対応することができる。コンセプト・ノード２０４に対応するコンセプト・プロフィール・ページは、例えば、選択可能な「チェックイン」アイコン（例えばクリック可能な「チェックイン」アイコンなど）、または選択可能な「お気に入りに追加」アイコンを含むことができる。同様に、ユーザがこうしたアイコンをクリックした後に、ソーシャルネットワーキング・システム１６０は、各アクションに対応するユーザのアクションに応じて、「お気に入り」エッジまたは「チェックイン」エッジを作成することができる。限定ではなく別の例として、ユーザ（「ユーザＣ」）は、特定のアプリケーション（オンライン音楽アプリケーションのスポティファイ（ＳＰＯＴＩＦＹ）（登録商標））を使用して、特定の歌（「ランブル・オン」）を聴くことができる。この場合、ソーシャルネットワーキング・システム１６０は、ユーザに対応するユーザ・ノード２０２と、歌およびアプリケーションに対応するコンセプト・ノード２０４との間に（図２に示されるような）「聴いた」エッジ２０６および「使用した」エッジを作成して、ユーザが歌を聴き、アプリケーションを使ったことを示すことができる。また、ソーシャルネットワーキング・システム１６０は、歌およびアプリケーションに対応する各コンセプト・ノード２０４間に（図２に示されるような）「プレイした」エッジ２０６を作成して、特定の歌が特定のアプリケーションによってプレイされたことを示すことができる。この場合、「プレイした」エッジ２０６は、外部オーディオ・ファイル（歌「イマジン」）に対して外部アプリケーション（スポティファイ）によって行われるアクションに対応する。本開示では、ユーザ２０２とコンセプト・ノード２０４とをつなぐ特定の属性を有する特定のエッジ２０６について説明しているが、本開示は、ユーザ・ノード２０２とコンセプト・ノード２０４とをつなぐ任意の適切な属性を有する任意の適切なエッジ２０６を想定している。また、本開示では、ユーザ・ノード２０２とコンセプト・ノード２０４との間のエッジが単一の関係を表す場合について説明しているが、本開示は、ユーザ・ノード２０２とコンセプト・ノード２０４との間のエッジが１つまたは複数の関係を表すことを想定している。限定ではなく一例として、エッジ２０６は、特定のコンセプトにおいて、ユーザが気に入っていることと、ユーザが使用したこととの両方を表すことができる。あるいは、別のエッジ２０６が、（図２において、ユーザ「Ｅ」のユーザ・ノード２０２と「スポティファイ」のコンセプト・ノード２０４との間で示されるような）ユーザ・ノード２０２とコンセプト・ノード２０４との間の各タイプの関係（または複数の単一関係）を表すことができる。
【００１７】
特定の実施形態において、ソーシャルネットワーキング・システム１６０は、ソーシャル・グラフ２００においてユーザ・ノード２０２とコンセプト・ノード２０４との間にエッジ２０６を作成することができる。限定ではなく一例として、（例えば、ユーザのクライアント・システム１３０によってホスティングされるウェブ・ブラウザまたは専用のアプリケーションを使用することによってなど）コンセプト・プロフィール・ページを閲覧するユーザは、ユーザのクライアント・システム１３０に、コンセプト・プロフィール・ページに関連付けられたコンセプトをユーザが好んでいることを示すメッセージをソーシャルネットワーキング・システム１６０に送信させ得る「いいね！」アイコンのクリックまたは選択によって、コンセプト・ノード２０４によって表されるコンセプトをユーザが気に入っていることを示すことができる。メッセージに応じて、ソーシャルネットワーキング・システム１６０は、ユーザとコンセプト・ノード２０４との間の「いいね」エッジ２０６によって示されるように、ユーザに関連付けられたユーザ・ノード２０２とコンセプト・ノード２０４との間にエッジ２０６を作成することができる。特定の実施形態において、ソーシャルネットワーキング・システム１６０は、エッジ２０６を１つまたは複数のデータ・ストアに格納することができる。特定の実施形態において、エッジ２０６は、特定のユーザ・アクションに応じて、ソーシャルネットワーキング・システム１６０によって自動的に形成され得る。限定ではなく一例として、第１のユーザが、ピクチャをアップロードする、映画を観る、または歌を聴く場合、第１のユーザに対応するユーザ・ノード２０２と、こうしたコンセプトに対応するコンセプト・ノード２０４との間にエッジ２０６が形成され得る。本開示では、特定のエッジ２０６を特定の方法で形成することについて説明しているが、本開示は、任意の適切なエッジ２０６を任意の適切な方法で形成することを想定している。
【００１８】
また、任意の２つのノード間の分離の度合いが、１つのノードから別のノードまでソーシャル・グラフを移動するのに必要なホップ（またはエッジ）の最小数として規定される。この２つのノード間の分離の度合いは、ソーシャル・グラフにおいて２つのノードによって表されるユーザ間の関係またはコンセプト間の関係の指標とみなすことができる。
【００１９】
上述のように、ソーシャルネットワーキング・システムは、１つまたは複数のデータ・ストアにソーシャル・グラフ情報および他のソーシャルネットワーキング・システム関連情報を格納することができる。特定の実施形態において、このデータ・ストアに格納される情報は、特定のデータ構造に従って編成され得る。各データ・ストアは、リレーショナル・データベース、カラムナ（columnar）・データベース、相関データベース、または他の適切なデータベースとすることができる。特定の実施形態は、任意の適切なタイプのデータベースを想定している。加えて、各データ・ストア（またはパーティション）は、別々のサーバによって保持されてもよく、別々の物理的ロケーションにおいて保持されてもよい。特定の実施形態では、ソーシャルネットワーキング・システム、クライアント・システム、またはサードパーティ・システムが、データ・ストアに格納された情報を管理し、取り出し、修正し、追加し、または削除することを可能にするインターフェースが提供され得る。
【００２０】
データベースに送出される検索クエリは、「Ｐｉ」、「ダウントン・アビー」、「ＮＢＡオール・スター・ゲーム」、「世界で最も高い山」などの、１つまたは複数のキーワード・フレーズを含むことができる。データベースは、キーワード・フレーズをハッシュ（hash）することによって、キーワード・フレーズの検索結果にインデックス付けを行うことができる。例えば、データベースのインデックス・サーバは、キーワード・フレーズにハッシュ関数を適用してその結果として生じるハッシュ値を得ることにより、キーワード・フレーズの検索結果を格納し、修正し、取り出し、または削除することができるとともに、そのハッシュ値に対応するロケーションにおいてデータベース内に検索結果を格納したりルックアップしたりすることができる。つまり、データベースの検索インデックスは、ハッシュ関数と関連付けられたハッシュ・テーブルを含むことができる。しかしながら、キーワード・フレーズはその長さが非常に長くなる可能性があるため、単にキーワード・フレーズをハッシュするだけでは、結果として、データベースにとって非常に大きい検索インデックスが生じることとなり、データベースに格納されているデータにアクセスする際により高いコストまたはより低い性能をもたらす可能性がある。特定の実施形態では、検索インデックスのサイズを低減するための方法について説明する。特定の実施形態では、データベースの検索クエリのための１つまたは複数の検索語を決定し、その検索語の構造に基づいてデータベースにインデックス付けを行うことができる。
【００２１】
図３は、検索語の構造に基づいてデータベースにインデックス付けを行うための例示的な方法３００を示す。方法３００は、ソーシャルネットワーキング・システムか、あるいは１つまたは複数のデータ・ストアすなわちデータベースを含む任意の適切なシステムの１つまたは複数のコンピューティング・デバイス（例えばサーバ）によって実装され得る。方法３００はステップ３１０から開始することができる。特定の実施形態では、ステップ３１０で、ソーシャルネットワーキング・システムの１つまたは複数のコンピューティング・デバイスが、検索クエリを受け取ることができる。例えば、受け取られた検索クエリは、ソーシャルネットワーキング・システムによってホスティングされるＰＨＰ（ハイパーテキスト・プリプロセッサ）プロセスを介して、ユーザによって送出された、構造化されたテキスト文字列もしくは実質的に構造化されていないテキスト文字列を含み得る。例えば、受け取られた検索クエリは、「誰がジョンとボブの共通の友達か？」、「誰がこの写真においてタグ付けされているか？」、「カリフォルニア州サンカルロス付近の興味深い場所を見つけて」、「私の友達の中の誰がこのレストランにチェックしているか？」、「誰がこの投稿を好んでいるか？」などであり得る。
【００２２】
特定の実施形態においては、ステップ３２０で、ソーシャルネットワーキング・システムの１つまたは複数のコンピューティング・デバイスが、受け取られた検索クエリに基づいて１つまたは複数の検索語を決定することができる。特定の実施形態において、各検索語は、接頭辞および接尾辞を含み得る。
【００２３】
例えば、受け取られた検索クエリが「誰がジョンとボブの共通の友達か？」である場合には、コンピューティング・デバイスは、「ジョン」のユーザ識別子＜１７７＞および「ボブ」のユーザ識別子＜２１３＞を決定し得る。コンピューティング・デバイスは、受け取られた検索クエリが、２つの検索語「友達：＜１７７＞」および「友達：＜２１３＞」で構成され得ると決定し得る。決定された検索語の各々は、接頭辞「友達：」（すなわち、〜の友達）およびユーザ識別子（＜１７７＞または＜２１３＞）による接尾辞を含む。各検索語の予期される検索結果は、ユーザ識別子のリスト（例えば、ユーザ＜１７７＞の友達であるユーザのリスト）を含み得る。コンピューティング・デバイスは、２つの決定された検索語の予期される検索結果にＡＮＤ演算子を適用することによって（すなわち、ＡＮＤ  友達：＜１７７＞友達：＜２１３＞）、受け取られた検索クエリの結果を決定することができる。
【００２４】
例えば、コンピューティング・デバイスは、受け取られた検索クエリである「誰がこの写真においてタグ付けされているか？」が、検索語「写真においてタグ付けされている：＜６５１９９＞」によって構成され、この検索語が、接頭辞「写真においてタグ付けされている」（すなわち、写真においてタグ付けされているユーザ）および「この写真」の写真識別子＜６５１９９＞による接尾辞を有すると決定し得る。この検索語の予期される結果は、写真＜６５１９９＞にタグ付けされたユーザに対応するユーザ識別子のリストを含み得る。
【００２５】
例えば、コンピューティング・デバイスは、受け取られた検索クエリである「カリフォルニア州サンカルロス付近の興味深い場所を見つけて」が、検索語「内における場所：＜７５２０３９＞」によって構成され、この検索語が、接頭辞「内における場所」（マップ・タイル内における場所）および「カリフォルニア州サンカルロス」に対応するマップ・タイル識別子＜７５２０３９＞による接尾辞を有すると決定し得る。ここで、マップは、世界、世界の一部分、または任意の適切な領域などの地理的領域を表し得る。このマップは複数のマップ・タイルに分割することができ、各マップ・タイルは、マップの特定の地理的領域を表すことができる。例えば、カリフォルニア州サンカルロスに対応するマップ・タイル＜７５２０３９＞は、地理座標において（３７．５２，−１２２．２４）、（３７．５２，−１２２．３０）、（３７．４７，−１２２．３０）、および（３７．４７，−１２２．２４）という４つのコーナーを有する長方形領域を含み得る。検索語「内における場所：＜７５２０３９＞」の予期される結果は、場所（または任意の適切なコンセプト）の識別子のリストを含むことができ、各場所（またはコンセプト）は、マップ・タイル＜７５２０３９＞の長方形領域内のロケーションを有する。
【００２６】
特定の実施形態では、ステップ３３０で、検索語の各々について、コンピューティング・デバイスは、各検索語の接頭辞および接尾辞に基づいて第１の２進数を生成し得る。さらに、コンピューティング・デバイスは、接頭辞に基づいて第２の２進数を生成し、接尾辞のオブジェクト・タイプに基づいて第３の２進数を生成し得る。コンピューティング・デバイスは、第２の２進数と第３の２進数とを連結することによって第１の２進数を生成することができる。
【００２７】
コンピューティング・デバイスは、まず、各検索語の接頭辞に基づいて、検索語ごとの第２の２進数を生成し得る。例えば、コンピューティング・デバイスは、検索語の接頭辞を、１０ビットの長さを有する第２の２進数にマッピングすることができる。この第２の２進数の１０ビットの長さは、第２の２進数が、上述した「友達：」や、「写真においてタグ付けされている：」や、「内における場所：」など、最大で約１０００（２１０）個までの異なる接頭辞を表すことを可能にする。接頭辞の他の例には、「の投稿：」（ユーザによる投稿）、「のコメンター：」（投稿に関するコメントを述べたユーザ）、および「に好感を持つ人：」（投稿、写真、または任意の適切なコンセプトに好感を持つユーザ）が含まれ得る。特定の実施形態は、検索語の任意の適切な接頭辞を想定している。コンピューティング・デバイスは、ソーシャルネットワーキング・システムのデータ・ストアに格納されているマッピング・テーブルにアクセスし、マッピング・テーブルをルックアップすることで、特定の接頭辞を表す特定の１０ビットの２進数を得ることができる。
【００２８】
コンピューティング・デバイスは、各検索語の接尾辞のオブジェクト・タイプ、すなわち各検索語の接尾辞オブジェクト・タイプに基づいて、検索語ごとの第３の２進数を生成し得る。コンピューティング・デバイスは、各検索語の接尾辞のオブジェクト・タイプに基づいて、第３の２進数の長さを決定し得る。コンピューティング・デバイスは、特定のオブジェクト・タイプの第３の２進数の長さを、その長さが、ソーシャルネットワーキング・システムに格納されている特定のオブジェクト・タイプのすべての考えられるオブジェクトを一意に表すのに十分な大きさになるように決定し得る。この第３の２進数の長さは、ハッシュ関数との関連付けの衝突を回避するために、特定のオブジェクト・タイプのすべての考えられるオブジェクトを一意に表すのに十分な大きさの２倍超とすることもできる。ここで、衝突とは、ハッシュ関数に供給される２つの異なる入力値（ハッシュ・キー）が同一の結果（ハッシュ値）をもたらす可能性があることを示し得る。衝突は、インデックス付けに望ましい１対１のマッピング特性を有しない。例えば、コンピューティング・デバイスは、ユーザ識別子の接尾辞について３７ビットの２進数を生成し得る。つまり、ユーザ識別子は３７ビットの２進数に変換され得る。３７ビットの２進数は、ソーシャルネットワーキング・システムの２１５人の異なるユーザを一意に表すのに十分となり得る。別の例では、コンピューティング・デバイスは、コンセプト識別子（場所の識別子など）の接尾辞について６４ビットの２進数を生成し得る。つまり、コンセプト識別子は６４ビットの２進数に変換され得る。６４ビットの２進数は、ソーシャルネットワーキング・システムの２３０個の異なるコンセプト・ノードを一意に表すのに十分となり得る。さらに別の例では、コンピューティング・デバイスは、マップ・タイル識別子の接尾辞について３２ビットの２進数を生成し得る。つまり、マップ・タイル識別子は、３２ビットの２進数に変換され得る。３２ビットの２進数は、ソーシャルネットワーキング・システムに格納されているマップについての２１５個の異なるマップ・タイルを一意に表すのに十分となり得る。特定の実施形態は、任意の適切な接尾辞オブジェクト・タイプを想定している。例えば、これに限定されないが、接尾辞オブジェクト・タイプは、ユーザ、場所、コンセプト、マップ・タイル、投稿、写真、アプリケーション、イベント、ウェブページ、またはビデオに対応し得る。
【００２９】
特定の実施形態において、コンピューティング・デバイスは、第２の２進数と第３の２進数とを連結することによって、第１の２進数を生成することができる。例えば、検索語「友達：＜１７７＞」の第１の２進数は、接頭辞「友達：」を表す１０ビットの（第２の）２進数が、接尾辞＜１７７＞を表す３７ビットの（第３の）２進数と連結されることによって構成されている。したがって、検索語「友達：＜１７７＞」の第１の２進数は、４７ビットの長さを有する。別の例として、検索語「写真においてタグ付けされている：＜６５１９９＞」の第１の２進数は、接頭辞「写真においてタグ付けされている：」を表す１０ビットの（第２の）２進数が、接尾辞＜６５１９９＞を表す６４ビットの（第３の）２進数と連結されることによって構成されている。したがって、検索語「写真においてタグ付けされている：＜６５１９９＞」の第１の２進数は、７４ビットの長さを有する。さらに別の例として、検索語「内における場所：＜７５２０３９＞」の第１の２進数は、接頭辞「内における場所：」を表す１０ビットの（第２の）２進数が、接尾辞＜７５２０３９＞を表す３２ビットの（第３の）２進数と連結されることによって構成されている。したがって、検索語「内における場所：＜７５２０３９＞」の第１の２進数は、４２ビットの長さを有する。
【００３０】
特定の実施形態では、ステップ３４０で、コンピューティング・デバイスは、検索語ごとに、第１の２進数をハッシュすることによって１つまたは複数のデータ・ストアから各検索語の１つまたは複数の検索結果にアクセスし、それらの検索結果を取り出すことができる。コンピューティング・デバイスは、第１の２進数を、適切なハッシュ関数を用いてハッシュすることができる。すなわち、データ・ストアは、ハッシュ関数と関連付けられた１つまたは複数のハッシュ・テーブルを用いて、各検索語に対応する第１の２進数についての検索結果にインデックス付けを行うことができる。いくつかの実施形態では、コンピューティング・デバイスは、適切なハッシュ関数を用いて第１の２進数をハッシュする前に、第１の２進数に可逆変換関数を適用することができる。このケースにおいては、第１の２進数は、「１」のビットの大部分が第１の２進数のビットのある特定の範囲内にあるという点で、「塊のある」（lumpy）特性を有し得る。可逆変換関数は、塊のある第１の２進数を、より均一に分散された（例えば、「１」のビットが第１の２進数のすべてのビットの間でより均一に分散されている）形に変換し、したがって、ハッシュ関数と関連付けられる可能な衝突を回避することができる。なお、可逆関数Ｆは、ｘ＝Ｆ−１（Ｆ（ｘ））という挙動を有し、ここで、Ｆ−１はＦの逆関数である。
【００３１】
特定の実施形態において、データ・ストアは、複数のハッシュ・テーブルを維持することができる。各ハッシュ・テーブルは、特定の接尾辞オブジェクト・タイプの検索語についての検索結果にインデックス付けを行うことができる。すなわち、データ・ストアは、検索語の接尾辞のオブジェクト・タイプに基づいて検索結果にインデックス付けを行うことができる。例えば、データ・ストアは、ユーザ・オブジェクト・タイプの接尾辞を有する検索語（＜１７７＞のユーザ識別子を持つ「友達：＜１７７＞」など）のためのハッシュ・テーブルを維持することができる。データ・ストアは、コンセプト・オブジェクト・タイプの接尾辞を有する検索語（＜６５１９９＞のコンセプト識別子を持つ「写真においてタグ付けされている：＜６５１９９＞」など）のための別のハッシュ・テーブルを維持することができる。データ・ストアは、マップ・タイル・オブジェクト・タイプの接尾辞を有する検索語（＜７５２０３９＞のマップ・タイル識別子を持つ「内における場所：＜７５２０３９＞」など）のためのさらに別のハッシュ・テーブルを維持することができる。加えて、各ハッシュ・テーブルは、検索語の接頭辞にインデックス付けを行うことができる１つまたは複数の接頭辞マップも含むことができる。一実施形態において、データ・ストアの各々は、単一のオブジェクト・タイプのオブジェクトを格納するように構成され得る。例えば、データ・ストアは、ユーザ・オブジェクト（および格納される各ユーザ・オブジェクトと関連付けられる情報）を格納するように構成され得る。別のデータ・ストアは、コンセプト・オブジェクト（および格納される各コンセプト・オブジェクトと関連付けられる情報）を格納するように構成され得る。第３のデータ・ストアは、マップ・タイル・オブジェクト（および格納される各マップ・タイル・オブジェクトと関連付けられる情報）を格納するように構成され得る。データ・ストアの各々は、上述の１つまたは複数のハッシュ・テーブルを含むことができる。
【００３２】
対照的に、上述した各検索語の接尾辞オブジェクト・タイプに基づいた、異なる長さを持つ２進数を使用して検索語を表すのではなく、長い２進数を使用して、任意の接尾辞オブジェクト・タイプ（またはそれらの欠如）についての任意の検索語を表すこともできる。例えば、９６ビットの２進数を使用して、ソーシャルネットワーキング・システムのための任意の検索語を一意に表すことができる。しかしながら、９６ビットで表される検索語にインデックス付けを行うのに使用される対応する単一のハッシュ・テーブルは、上述のような、より短い２進数を有する検索語にインデックス付けを行うために使用されるハッシュ・テーブルよりもずっと大きくなる可能性がある。従って、特定の実施形態は、検索語の接頭辞および接尾辞における検索語の構造を決定し、接尾辞のオブジェクト・タイプに基づくより短い２進数を用いて検索語を表し、それによりハッシュ・テーブルのサイズを低減することができる。例えば、特定の実施形態は、ソーシャルネットワーキング・システムのために、ハッシュ・テーブルの全体サイズを、２０％超低減することができる。
【００３３】
一実施形態において、コンピューティング・デバイスは、前述のように第２の２進数および第３の２進数を生成せずに、第１の２進数を生成することができる。例えば、コンピューティング・デバイスは、コンピューティング・デバイスが検索語についての接頭辞も接尾辞も決定することができない場合に、検索語を表す６４ビットの２進数を生成することができる。コンピューティング・デバイスは、６４ビットの２進数をハッシュすることによって、データ・ストアから、検索語についての１つまたは複数の検索結果にアクセスし、取り出すことができる。
【００３４】
特定の実施形態においては、ステップ３５０で、コンピューティング・デバイスは、それぞれの検索語の検索結果を集約することができる。例えば、前述したような、受け取られた検索クエリが「誰がジョンとボブの共通の友達か？」の場合には、コンピューティング・デバイスは、検索語「友達：＜１７７＞」について、データ・ストアから第１の結果セット（ユーザ＜１＞、ユーザ＜３＞、ユーザ＜１１＞など）を取り出し得る。コンピューティング・デバイスは、検索語「友達：＜２１３＞」については、データ・ストアから第２の結果セット（ユーザ＜１＞、ユーザ＜１１＞、ユーザ＜１７＞、ユーザ＜２８＞など）を取り出し得る。コンピューティング・デバイスは、第１の結果セットおよび第２の結果セットにＡＮＤ演算を適用することによって検索結果を集約し、集約された検索結果（ユーザ＜１＞、ユーザ＜１１＞など）を取得することができる。
【００３５】
特定の実施形態は、必要に応じて、図３の方法の１つまたは複数のステップを繰り返すことができる。本開示では、図３の方法の特定のステップを特定の順序で生じるものとして説明および示しているが、本開示は、任意の適切な順序で生じる図３の方法の任意の適切なステップを想定している。また、本開示は、図３の方法の特定のステップを実行する特定のコンポーネント、デバイス、またはシステムについて説明および示しているが、本開示は、図３の方法の任意の適切なステップを実行する任意の適切なコンポーネント、デバイス、またはシステムの任意の適切な組合せを想定している。
【００３６】
図４は、例示的なコンピュータ・システム４００を示す。特定の実施形態では、１つまたは複数のコンピュータ・システム４００が、本明細書において説明および示されている１つまたは複数の方法のうちの１つまたは複数のステップを実行する。特定の実施形態では、１つまたは複数のコンピュータ・システム４００が、本明細書において説明および示されている機能を提供する。特定の実施形態では、１つまたは複数のコンピュータ・システム４００上で稼働するソフトウェアが、本明細書において説明および示されている１つまたは複数の方法のうちの１つまたは複数のステップを実行し、または本明細書において説明および示されている機能を提供する。特定の実施形態は、１つまたは複数のコンピュータ・システム４００の１つまたは複数の部分を含む。本明細書においては、コンピュータ・システムへの言及は、必要に応じて、コンピューティング・デバイスを包含することができ、その逆もまた同様である。また、コンピュータ・システムへの言及は、必要に応じて、１つまたは複数のコンピュータ・システムを包含することができる。
【００３７】
本開示は、任意の適切な数のコンピュータ・システム４００を想定している。本開示は、任意の適切な物理的な形態を取るコンピュータ・システム４００を想定している。限定ではなく一例として、コンピュータ・システム４００は、組み込みコンピュータ・システム、システムオンチップ（ＳＯＣ）、シングルボード・コンピュータ・システム（ＳＢＣ）（例えば、コンピュータオンモジュール（ＣＯＭ）もしくはシステムオンモジュール（ＳＯＭ）など）、デスクトップ・コンピュータ・システム、ラップトップもしくはノートブック・コンピュータ・システム、インタラクティブ・キオスク、メインフレーム、コンピュータ・システムのメッシュ、モバイル電話、携帯情報端末（ＰＤＡ）、サーバ、タブレット・コンピュータ・システム、またはこれらのうちの２つ以上の組合せとすることができる。必要に応じて、コンピュータ・システム４００は、１つまたは複数のコンピュータ・システム４００を含むものでもよく、単一型もしくは分散型であってもよく、複数のロケーションにわたっていてもよく、複数のマシンにわたっていてもよく、複数のデータセンタにわたっていてもよく、クラウドに置かれていてもよく、クラウドは、１つまたは複数のネットワークにおいて１つまたは複数のクラウド・コンポーネントを含むことができる。必要に応じて、１つまたは複数のコンピュータ・システム４００は、本明細書において説明または示されている１つまたは複数の方法のうちの１つまたは複数のステップを、実質的な空間上のまたは時間上の制限を伴わずに実行することができる。限定ではなく一例として、１つまたは複数のコンピュータ・システム４００は、本明細書において説明または示されている１つまたは複数の方法のうちの１つまたは複数のステップをリアルタイムで、またはバッチモードで実行することができる。１つまたは複数のコンピュータ・システム４００は、必要に応じて、本明細書において説明または示されている１つまたは複数の方法のうちの１つまたは複数のステップを別々の時間にまたは別々の場所で実行することができる。
【００３８】
特定の実施形態において、コンピュータ・システム４００は、プロセッサ４０２、メモリ４０４、記憶装置４０６、入力／出力（Ｉ／Ｏ）インターフェース４０８、通信インターフェース４１０、およびバス４０２を含む。本開示では、特定の数の特定のコンポーネントを特定の構成で有する特定のコンピュータ・システムについて説明および示しているが、本開示は、任意の適切な数の任意の適切なコンポーネントを任意の適切な構成で有する任意の適切なコンピュータ・システムを想定している。
【００３９】
特定の実施形態において、プロセッサ４０２は、コンピュータ・プログラムを構成している命令などを実行するためのハードウェアを含む。限定ではなく一例として、命令を実行するために、プロセッサ４０２は、内部レジスタ、内部キャッシュ、メモリ４０４、または記憶装置４０６から命令を取り出し（またはフェッチし）、それらの命令をデコードして実行し、次いで、１つまたは複数の結果を内部レジスタ、内部キャッシュ、メモリ４０４、または記憶装置４０６に書き込むことができる。特定の実施形態において、プロセッサ４０２は、データ、命令、またはアドレスのための１つまたは複数の内部キャッシュを含むことができる。本開示は、必要に応じて、任意の適切な数の任意の適切な内部キャッシュを含むプロセッサ４０２を想定している。限定ではなく一例として、プロセッサ４０２は、１つまたは複数の命令キャッシュ、１つまたは複数のデータ・キャッシュ、および１つまたは複数の変換ルックアサイド・バッファ（ＴＬＢ）を含むことができる。命令キャッシュ内の命令は、メモリ４０４または記憶装置４０６内の命令のコピーとすることができ、命令キャッシュは、プロセッサ４０２によるそれらの命令の取り出しをスピードアップすることができる。データ・キャッシュ内のデータは、処理を行うためにプロセッサ４０２で実行する命令のためのメモリ４０４もしくは記憶装置４０６内のデータのコピーや、プロセッサ４０２において実行される後続命令によるアクセスのためのあるいはメモリ４０４もしくは記憶装置４０６への書き込みのためのプロセッサ４０２で実行された先の命令の結果や、他の適切なデータであってよい。データ・キャッシュは、プロセッサ４０２による読み取りオペレーションまたは書き込みオペレーションをスピードアップすることができる。ＴＬＢは、プロセッサ４０２のための仮想アドレス変換をスピードアップすることができる。特定の実施形態において、プロセッサ４０２は、データ、命令、またはアドレスのための１つまたは複数の内部レジスタを含むことができる。本開示は、必要に応じて、任意の適切な数の任意の適切な内部レジスタを含むプロセッサ４０２を想定している。必要に応じて、プロセッサ４０２は、１つまたは複数の演算ロジック・ユニット（ＡＬＵ）を含んでもよく、マルチコア・プロセッサであってもよく、あるいは１つまたは複数のプロセッサ４０２を含んでもよい。本開示では、特定のプロセッサについて説明および示しているが、本開示は、任意の適切なプロセッサを想定している。
【００４０】
特定の実施形態において、メモリ４０４は、プロセッサ４０２が実行するための命令、またはプロセッサ４０２が処理するためのデータを格納するためのメイン・メモリを含む。限定ではなく一例として、コンピュータ・システム４００は、命令を記憶装置４０６または別のソース（例えば、別のコンピュータ・システム４００など）からメモリ４０４にロードすることができる。次いでプロセッサ４０２は、命令をメモリ４０４から内部レジスタまたは内部キャッシュにロードすることができる。命令を実行するために、プロセッサ４０２は、命令を内部レジスタまたは内部キャッシュから取り出し、それらの命令をデコードすることができる。命令の実行中または実行後に、プロセッサ４０２は、１つまたは複数の結果（それらは、中間結果の場合も、最終結果の場合もある）を内部レジスタまたは内部キャッシュに書き込むことができる。次いでプロセッサ４０２は、それらの結果のうちの１つまたは複数をメモリ４０４に書き込むことができる。特定の実施形態では、プロセッサ４０２は、（記憶装置４０６または他の場所ではなく）１つまたは複数の内部レジスタもしくは内部キャッシュ内の命令またはメモリ４０４内の命令のみを実行し、（記憶装置４０６または他の場所ではなく）１つまたは複数の内部レジスタもしくは内部キャッシュ内のデータまたはメモリ４０４内のデータのみを処理する。１つまたは複数のメモリ・バス（各々、アドレス・バスおよびデータ・バスを含み得る）は、プロセッサ４０２をメモリ４０４に結合することができる。バス４１２は、後述するように、１つまたは複数のメモリ・バスを含むことができる。特定の実施形態では、１つまたは複数のメモリ管理ユニット（ＭＭＵ）が、プロセッサ４０２とメモリ４０４との間に置かれ、プロセッサ４０２によって要求されるメモリ４０４へのアクセスを容易にする。特定の実施形態において、メモリ４０４は、ランダム・アクセス・メモリ（ＲＡＭ）を含む。このＲＡＭは、必要に応じて、揮発性メモリとすることができる。必要に応じて、このＲＡＭは、ダイナミックＲＡＭ（ＤＲＡＭ）またはスタティックＲＡＭ（ＳＲＡＭ）とすることができる。また、必要に応じて、このＲＡＭは、シングルポートＲＡＭまたはマルチポートＲＡＭとすることができる。本開示は、任意の適切なＲＡＭを想定している。メモリ４０４は、必要に応じて、１つまたは複数のメモリ４０４を含むことができる。本開示では、特定のメモリについて説明および示しているが、本開示は、任意の適切なメモリを想定している。
【００４１】
特定の実施形態において、記憶装置４０６は、データまたは命令のための大容量記憶装置を含む。限定ではなく一例として、記憶装置４０６は、ハード・ディスク・ドライブ（ＨＤＤ）、フロッピー（登録商標）・ディスク・ドライブ、フラッシュ・メモリ、光ディスク、光磁気ディスク、磁気テープ、またはユニバーサル・シリアル・バス（ＵＳＢ）ドライブ、またはこれらのうちの２つ以上の組合せを含むことができる。記憶装置４０６は、必要に応じて、取り外し可能な、または取り外し不能な（すなわち、固定された）媒体を含むことができる。記憶装置４０６は、必要に応じて、コンピュータ・システム４００の内部にあっても、外部にあってもよい。特定の実施形態において、記憶装置４０６は、不揮発性のソリッドステート・メモリである。特定の実施形態において、記憶装置４０６は、読み取り専用メモリ（ＲＯＭ）を含む。必要に応じて、このＲＯＭは、マスクプログラムＲＯＭ、プログラマブルＲＯＭ（ＰＲＯＭ）、消去可能ＰＲＯＭ（ＥＰＲＯＭ）、電気的消去可能ＰＲＯＭ（ＥＥＰＲＯＭ）、電気的書替え可能ＲＯＭ（ＥＡＲＯＭ）、またはフラッシュ・メモリ、またはこれらのうちの２つ以上の組合せとすることができる。本開示は、任意の適切な物理的形態を取る大容量記憶装置４０６を想定している。記憶装置４０６は、必要に応じて、プロセッサ４０２と記憶装置４０６との間における通信を容易にする１つまたは複数の記憶装置制御ユニットを含むことができる。必要に応じて、記憶装置４０６は、１つまたは複数の記憶装置４０６を含むことができる。本開示では、特定の記憶装置について説明および示しているが、本開示は、任意の適切な記憶装置を想定している。
【００４２】
特定の実施形態において、Ｉ／Ｏインターフェース４０８は、コンピュータ・システム４００と１つまたは複数のＩ／Ｏデバイスとの間における通信のための１つまたは複数のインターフェースを提供するハードウェア、ソフトウェア、またはその両方を含む。コンピュータ・システム４００は、必要に応じて、これらのＩ／Ｏデバイスのうちの１つまたは複数を含むことができる。これらのＩ／Ｏデバイスのうちの１つまたは複数は、人とコンピュータ・システム４００との間における通信を可能にすることができる。限定ではなく一例として、Ｉ／Ｏデバイスは、キーボード、キーパッド、マイクロフォン、モニタ、マウス、プリンタ、スキャナ、スピーカ、スチル・カメラ、スタイラス、タブレット、タッチ・スクリーン、トラックボール、ビデオ・カメラ、別の適切なＩ／Ｏデバイス、またはこれらのうちの２つ以上の組合せを含むことができる。Ｉ／Ｏデバイスは、１つまたは複数のセンサを含むことができる。本開示は、任意の適切なＩ／Ｏデバイス、およびそれらのＩ／Ｏデバイスのための任意の適切なＩ／Ｏインターフェース４０８を想定している。必要に応じて、Ｉ／Ｏインターフェース４０８は、プロセッサ４０２がこれらのＩ／Ｏデバイスのうちの１つまたは複数を駆動することを可能にする１つまたは複数のデバイス・ドライバまたはソフトウェア・ドライバを含むことができる。Ｉ／Ｏインターフェース４０８は、必要に応じて、１つまたは複数のＩ／Ｏインターフェース４０８を含むことができる。本開示では、特定のＩ／Ｏインターフェースについて説明および示しているが、本開示は、任意の適切なＩ／Ｏインターフェースを想定している。
【００４３】
特定の実施形態において、通信インターフェース４１０は、コンピュータ・システム４００と、１つまたは複数の他のコンピュータ・システム４００あるいは１つまたは複数のネットワークとの間における通信（例えば、パケットベースの通信など）のための１つまたは複数のインターフェースを提供するハードウェア、ソフトウェア、またはその両方を含む。限定ではなく一例として、通信インターフェース４１０は、イーサネット（登録商標）もしくはその他の有線ベースのネットワークと通信するためのネットワーク・インターフェース・コントローラ（ＮＩＣ）もしくはネットワーク・アダプタ、またはＷｉ−Ｆｉ（登録商標）ネットワークなどのワイヤレス・ネットワークと通信するためのワイヤレスＮＩＣ（ＷＮＩＣ）もしくはワイヤレス・アダプタを含むことができる。本開示は、任意の適切なネットワーク、およびそのネットワークのための任意の適切な通信インターフェース４１０を想定している。限定ではなく一例として、コンピュータ・システム４００は、アド・ホック・ネットワーク、パーソナル・エリア・ネットワーク（ＰＡＮ）、ローカル・エリア・ネットワーク（ＬＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、メトロポリタン・エリア・ネットワーク（ＭＡＮ）、あるいはインターネットの１つまたは複数の部分、またはこれらのうちの２つ以上の組合せと通信することができる。これらのネットワークの１つまたは複数のうちの１つまたは複数の部分は、有線またはワイヤレスとすることができる。一例として、コンピュータ・システム４００は、ワイヤレスＰＡＮ（ＷＰＡＮ）（例えばブルートゥース（登録商標）ＷＰＡＮなど）、Ｗｉ−Ｆｉ（登録商標）ネットワーク、Ｗｉ−ＭＡＸ（登録商標）ネットワーク、セルラ電話ネットワーク（例えば、ＧＳＭ（登録商標）など）、または他の適切なワイヤレス・ネットワーク、またはこれらのうちの２つ以上の組合せと通信することができる。コンピュータ・システム４００は、必要に応じて、これらのネットワークのうちの任意のネットワークのための任意の適切な通信インターフェース４１０を含むことができる。通信インターフェース４１０は、必要に応じて、１つまたは複数の通信インターフェース４１０を含むことができる。本開示では、特定の通信インターフェースについて説明および示しているが、本開示は、任意の適切な通信インターフェースを想定している。
【００４４】
特定の実施形態において、バス４１２は、コンピュータ・システム４００のコンポーネント同士を互いに結合するハードウェア、ソフトウェア、またはその両方を含む。限定ではなく一例として、バス４１２は、アクセラレイティッド・グラフィックス・ポート（ＡＧＰ）もしくは他のグラフィックス・バス、エンハンスド・インダストリー・スタンダード・アーキテクチャ（ＥＩＳＡ）バス、フロントサイド・バス（ＦＳＢ）、ハイパートランスポート（ＨＴ）インターコネクト、インダストリー・スタンダード・アーキテクチャ（ＩＳＡ）バス、インフィニバンド・インターコネクト、ローピンカウント（ＬＰＣ）バス、メモリ・バス、マイクロ・チャネル・アーキテクチャ（ＭＣＡ）バス、ペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）バス、ＰＣＩエクスプレス（ＰＣＩｅ）バス、シリアル・アドバンスド・テクノロジー・アタッチメント（ＳＡＴＡ）バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション・ローカル（ＶＬＢ）バス、または別の適切なバス、またはこれらのうちの２つ以上の組合せを含むことができる。バス４１２は、必要に応じて、１つまたは複数のバス４１２を含むことができる。本開示では、特定のバスについて説明および示しているが、本開示は、任意の適切なバスまたはインターコネクトを想定している。
【００４５】
本明細書において、コンピュータ読み取り可能非一時的記憶媒体は、必要な場合、１つもしくは複数の半導体ベースもしくは他の集積回路（ＩＣ）（例えば、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、もしくは特定用途向けＩＣ（ＡＳＩＣ）など）、ハード・ディスク・ドライブ（ＨＤＤ）、ハイブリッド・ハード・ドライブ（ＨＨＤ）、光ディスク、光ディスク・ドライブ（ＯＤＤ）、光磁気ディスク、光磁気ドライブ、フロッピー（登録商標）・ディスケット、フロッピー（登録商標）・ディスク・ドライブ（ＦＤＤ）、磁気テープ、ソリッドステート・ドライブ（ＳＳＤ）、ＲＡＭドライブ、セキュア・デジタル・カードもしくはドライブ、任意の他の適切なコンピュータ読み取り可能非一時的記憶媒体、またはこれらの２つ以上の組合せを含むことができる。コンピュータ読み取り可能非一時的記憶媒体は、必要に応じて、揮発性、不揮発性、または揮発性と不揮発性との組合せであってよい。
【００４６】
本明細書において、「または」は、別段明示的に示されず別段文脈によっても示されない場合、包括的であり排他的ではない。したがって、本明細書において、「ＡまたはＢ」は、別段明示的に示されず別段文脈によっても示されない場合、「Ａ、Ｂ、または両方」を意味する。また、「および」は、別段明示的に示されず別段文脈によっても示されない場合、共にと別々の両方のことである。したがって、本明細書において、「ＡおよびＢ」は、別段明示的に示されず別段文脈によっても示されない場合、「共にまたは別々にＡおよびＢ」を意味する。
【００４７】
本開示の範囲は、当業者が認識することになる、本明細書に記載または示した例示的な実施形態の変形、置換、変化、改変、および変更をすべて含む。本開示の範囲は、本明細書に記載または示した例示的な実施形態に限定されない。また、本開示は、それぞれの実施形態を、特定の構成要素、要素、機能、動作、または工程を含みものとして本明細書に記載しかつ示したが、これらの実施形態のいずれも、当業者が認識することになる、本明細書のいずれかの箇所に記載または示された構成要素、要素、機能、動作、または工程のいずれかの任意の組合せまたは並べ替えを含むことができる。さらに、装置もしくはシステム、または装置もしくはシステムの構成要素が、特定の機能を行う、ようになされた、ように配置された、ことが可能な、ように構成された、ことを可能にする、ように動作可能な、または、ように動作する、といったことに対する特許請求の範囲における言及は、それまたはその特定の機能がアクティブ化、ターン・オン、またはアンロックされているかどうかにかかわらず、こうした装置、システム、または構成要素が、そのようになされ、配置され、可能であり、構成され、可能にし、動作可能であり、または動作する限り、こうした装置、システム、構成要素を含む。
【要約】一実施形態において、サーバは、検索クエリを受け取る。サーバは、受け取られた検索クエリに基づいて１つまたは複数の検索語を決定する。各検索語は、接頭辞および接尾辞を含む。検索語の各々について、サーバは、各検索語の接頭辞および接尾辞に基づいて第１の２進数を生成し、第１の２進数をハッシュすることによって、データ・ストアから、各検索語の検索結果にアクセスして各検索語の検索結果を取り出す。サーバはさらに、それぞれの検索語の検索結果を集約する。【図１】
0005941239.tif 000002
【図２】
0005941239.tif 000003
【図３】
0005941239.tif 000004
【図４】
0005941239.tif 000005