(57)【特許請求の範囲】
【請求項１】
オーバーレイ・ネットワークにおいてノードによって複数キーワード・クエリを処理する方法であって、
分散型ネットワーク中の第１のノードにおいてクエリを受信することであって、前記クエリが第１のキーワードと第２のキーワードとを含む、受信することと、
前記第１のキーワードを含んでいるドキュメントの第１の数の第１のセットを見つけることと、
前記第１のセット中のドキュメントの前記第１の数の関数として、最適な第１のブルーム・フィルタ長および対応するハッシュ関数の第１の数を計算することと、
前記第１のセットの第１のブルーム・フィルタを、前記第２のキーワードをハッシングすることによって識別された前記分散型ネットワーク中の第２のノードに送ることであって、前記第１のブルーム・フィルタが前記第１のブルーム・フィルタ長とハッシュ関数の前記第１の数とを備える、送ることと、および、
前記クエリがＡＮＤクエリの場合には、前記第１のノードにおいて、前記第２のノードから検索結果を受信して、前記検索結果を問い合わせノードに戻し、前記クエリがＯＲクエリの場合には、前記第２のノードから肯定応答メッセージを受信すると、前記第１のノードにおいて、第１のキーワードを含んでいるドキュメントのセットを問い合せノードに送ること、
を備える方法。
【請求項２】
前記クエリがＡＮＤクエリを備える請求項１に記載の方法。
【請求項３】
前記クエリがＯＲクエリを備える請求項１に記載の方法。
【請求項４】
前記クエリがＡＮＤクエリとＯＲクエリの組合せを備える請求項１に記載の方法。
【請求項５】
前記第１のセットＤ１の前記第１のブルーム・フィルタ長Ｌsを計算することが、以下の式
【数１】
0005497172.tif 000039
ここにおいて、｜Ｄｊ｜は前記第１のセットＤ１のサイズを示す、
に従って計算することをさらに備え、前記第１のセットＤ１のハッシュ関数の第１の数ｒsを計算することが、以下の式
【数２】
0005497172.tif 000040
に従って計算することをさらに備える請求項２に記載の方法。
【請求項６】
前記第１のセットＤ１の前記第１のブルーム・フィルタ長Ｌsを計算することが、以下の式
【数３】
0005497172.tif 000041
ここにおいて、Ｒdesは、設計されたリコールレートを示す、
に従って計算することをさらに備え、前記第１のセットＤ１のハッシュ関数の第１の数ｒsを計算することが、以下の式
【数４】
0005497172.tif 000042
に従って計算することをさらに備える請求項３に記載の方法。
【請求項７】
通信コストをさらに低減するために、それぞれのセットのサイズ｜Ｄｊ｜に関する事前知識を使用することをさらに備える請求項１に記載の方法。
【請求項８】
ＡＮＤクエリを最適に実行するために、前記クエリをノード
【数５】
0005497172.tif 000043
に送り、次いで、｜Ｄｊ｜の２番目の最小値を有する次のノードに送ることをさらに備える請求項７に記載の方法。
【請求項９】
ＯＲクエリを最適に実行するために、最初に前記クエリをノード
【数６】
0005497172.tif 000044
に送り、次いで、｜Ｄｊ｜の２番目の最大値を有する次のノードに送ることをさらに備える請求項７に記載の方法。
【請求項１０】
クエリを処理するために前記第１のブルーム・フィルタを使用するまたは使用しないための条件を判断することであって、前記条件は、各セットのサイズ｜Ｄｊ｜がいつアプリオリに知られるかを備える、判断することをさらに備える請求項１に記載の方法。
【請求項１１】
【数７】
0005497172.tif 000045
のときのみ、前記第１のブルーム・フィルタを前記計算することを実行し、ＯＲクエリのために前記第１のブルーム・フィルタを使用することをさらに備える請求項１０に記載の方法。
【請求項１２】
分散型ネットワーク中の第１のノードにおいてクエリを受信するための第１のモジュールであって、前記クエリが第１のキーワードと第２のキーワードとを含む、第１のモジュールと、
前記第１のキーワードを含んでいるドキュメントの第１の数の第１のセットを見つけるための第２のモジュールと、
前記第１のセット中のドキュメントの前記第１の数の関数として、最適な第１のブルーム・フィルタ長および対応するハッシュ関数の第１の数を計算するための第３のモジュールと、
前記第１のセットの第１のブルーム・フィルタを、前記第２のキーワードをハッシングすることによって識別された前記分散型ネットワーク中の第２のノードに送るための第４のモジュールであって、前記第１のブルーム・フィルタが前記第１のブルーム・フィルタ長とハッシュ関数の前記第１の数とを備える、第４のモジュールと、および、
前記クエリがＡＮＤクエリの場合には、前記第２のノードから検索結果を受信して、前記検索結果を問い合わせノードに戻し、前記クエリがＯＲクエリの場合には、前記第２のノードから肯定応答メッセージを受信すると、第１のキーワードを含んでいるドキュメントのセットを問い合せノードに送るための第５のモジュールと、
を備える、ネットワークにおいてサービスを公開または発見するように構成された、複数キーワード・クエリを処理するための少なくとも１つのプロセッサ。
【請求項１３】
複数キーワード・クエリを処理するためのコードを記録したコンピュータ読み取り可能な記録媒体であって、
分散型ネットワーク中の第１のノードにおいてクエリを受信することをコンピュータに行わせるための第１のコード・セットであって、前記クエリが第１のキーワードと第２のキーワードとを含む、第１のコード・セットと、
前記第１のキーワードを含んでいるドキュメントの第１の数の第１のセットを見つけることを前記コンピュータに行わせるための第２のコード・セットと、
前記第１のセット中のドキュメントの前記第１の数の関数として、最適な第１のブルーム・フィルタ長および対応するハッシュ関数の第１の数を計算することを前記コンピュータに行わせるための第３のコード・セットと、
前記第１のセットの第１のブルーム・フィルタを、前記第２のキーワードをハッシングすることによって識別された前記分散型ネットワーク中の第２のノードに送ることを前記コンピュータに行わせるための第４のコード・セットであって、前記第１のブルーム・フィルタが前記第１のブルーム・フィルタ長とハッシュ関数の前記第１の数とを備える、第４のコード・セットと、および、
前記クエリがＡＮＤクエリの場合には、前記第２のノードから検索結果を受信し、前記検索結果を問い合わせノードに戻すことを前記コンピュータに行わせ、前記クエリがＯＲクエリの場合には、前記第２のノードから肯定応答メッセージを受信すると、第１のキーワードを含んでいるドキュメントのセットを問い合せノードに送ることを前記コンピュータに行わせるための第５のコード・セットと、
を備えるコンピュータ読み取り可能な記録媒体。
【請求項１４】
複数キーワード・クエリを処理するための装置であって、
分散型ネットワーク中の第１のノードにおいてクエリを受信するための手段であって、前記クエリが第１のキーワードと第２のキーワードとを含む、受信するための手段と、
前記第１のキーワードを含んでいるドキュメントの第１の数の第１のセットを見つけるための手段と、
前記第１のセット中のドキュメントの前記第１の数の関数として、最適な第１のブルーム・フィルタ長および対応するハッシュ関数の第１の数を計算するための手段と、
前記第１のセットの第１のブルーム・フィルタを、前記第２のキーワードをハッシングすることによって識別された前記分散型ネットワーク中の第２のノードに送るための手段であって、前記第１のブルーム・フィルタが前記第１のブルーム・フィルタ長とハッシュ関数の前記第１の数とを備える、送るための手段と、および、
前記クエリがＡＮＤクエリの場合には、前記第２のノードから検索結果を受信して、完全クエリ検索結果を問い合わせノードに戻し、前記クエリがＯＲクエリの場合には、前記第２のノードから肯定応答メッセージを受信すると、第１のキーワードを含んでいるドキュメントのセットを問い合せノードに送るための手段と、
を備える装置。
【請求項１５】
分散型ネットワークにおいて複数キーワード検索を実行するための装置であって、
第１のキーワードと第２のキーワードとを含めて問い合わせるように構成された受信機と、
前記第１のキーワードを含んでいるドキュメントの第１の数の第１のセットを見つけるように構成されたキーワード・セット判断構成要素と、
前記第１のセット中のドキュメントの前記第１の数の関数として、最適な第１のブルーム・フィルタ長および対応するハッシュ関数の第１の数を計算し、前記第１のセットの第１のブルーム・フィルタを、前記第２のキーワードをハッシングすることによって識別された前記分散型ネットワーク中の第２のノードに送るように構成されたブルーム・フィルタ計算構成要素であって、第１のブルーム・フィルタが前記第１のブルーム・フィルタ長とハッシュ関数の前記第１の数とを備える、ブルーム・フィルタ計算構成要素と、および、
前記クエリがＡＮＤクエリの場合には、前記第２のノードから検索結果を受信して、完全クエリ検索結果を問い合わせノードに戻し、前記クエリがＯＲクエリの場合には、前記第２のノードから肯定応答メッセージを受信すると、第１のキーワードを含んでいるドキュメントのセットを問い合せノードに送るように構成された、複数キーワード処理要素と
を備える装置。
【請求項１６】
前記クエリがＡＮＤクエリである請求項１５に記載の装置。
【請求項１７】
前記クエリがＯＲクエリである請求項１５に記載の装置。
【請求項１８】
前記クエリがＡＮＤクエリとＯＲクエリの組合せを備える請求項１５に記載の装置。
【請求項１９】
前記第１のセットＤ１の前記第１のブルーム・フィルタ長Ｌsを計算することが、以下の式
【数８】
0005497172.tif 000046
に従って計算することをさらに備え、前記第１のセットＤ１のハッシュ関数の第１の数ｒsを計算することが、以下の式
【数９】
0005497172.tif 000047
に従って計算することをさらに備える請求項１６に記載の装置。
【請求項２０】
前記第１のセットＤ１の前記第１のブルーム・フィルタ長Ｌsを計算することが、以下の式
【数１０】
0005497172.tif 000048
に従って計算することをさらに備え、前記第１のセットＤ１のハッシュ関数の第１の数ｒsを計算することが、以下の式
【数１１】
0005497172.tif 000049
に従って計算することをさらに備える請求項１７に記載の装置。
【請求項２１】
前記ブルーム・フィルタ計算構成要素が、通信コストをさらに低減するために、それぞれのセットのサイズ｜Ｄｊ｜に関する事前知識を使用するようにさらに構成される請求項１５に記載の装置。
【請求項２２】
前記ブルーム・フィルタ計算構成要素が、ＡＮＤクエリを最適に実行するために、前記クエリをノード
【数１２】
0005497172.tif 000050
に送り、次いで、｜Ｄｊ｜の２番目の最小値を有する次のノードに送るようにさらに構成される請求項２１に記載の装置。
【請求項２３】
前記ブルーム・フィルタ計算構成要素が、ＯＲクエリを最適に実行するために、最初に前記クエリをノード
【数１３】
0005497172.tif 000051
に送り、次いで、｜Ｄｊ｜の２番目の最大値を有する次のノードに送るようにさらに構成される請求項２１に記載の装置。
【請求項２４】
前記ブルーム・フィルタ計算構成要素が、クエリを処理するために前記第１のブルーム・フィルタを使用するまたは使用しないための条件を判断するようにさらに構成され、前記条件は、各セットのサイズ｜Ｄｊ｜がいつアプリオリに知られるかを備える請求項１５に記載の装置。
【請求項２５】
前記ブルーム・フィルタ計算構成要素が、
【数１４】
0005497172.tif 000052
のときのみ、前記第１のブルーム・フィルタを前記計算することを実行し、ＯＲクエリのために前記第１のブルーム・フィルタを使用するようにさらに構成される請求項２４に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、モバイル動作環境に関し、より詳細には、分散型ネットワーク、ならびに分散型ネットワーク上での、ＡＮＤクエリおよびＯＲクエリなど、複数キーワード・クエリのための方法および装置に関する。
【０００２】
米国特許法第１１９条に基づく優先権の主張
本特許出願は、本出願の譲受人に譲渡され、参照により明確に本明細書に組み込まれる、２００９年７月１４日に出願された「Methods and Apparatus for Performing Searches in a Peer-to-Peer Distributed Network」と題する仮出願第６１／２２５，５０５号の優先権を主張する。
【背景技術】
【０００３】
オーバーレイ・ネットワークは、既存のネットワークの上に構築されたノードおよび論理リンクの仮想ネットワークである。オーバーレイ・ネットワークの例には、限定はしないが、インターネット、Ｃｈｏｒｄ、コンテンツアドレス指定可能ネットワーク（ＣＡＮ）、Ｐａｓｔｒｙ、およびＶｉｃｅｒｏｙがある。いくつかのオーバーレイ・ネットワークでは、各ノードは、データの記憶および検索におけるネットワーク効率を高めるために、ネットワーク上でデータを配信するように、パーティションと呼ばれるオーバーレイ・ネットワークデータの部分を記憶することができる。
【０００４】
オーバーレイ・ネットワークに加入したデバイスまたはノードは、オーバーレイ・ネットワーク中の別のデバイスまたはノードからのサービスを取得することを望み得る。そのようなサービスは、複数のサービス記述言語のいずれか１つを使用してオーバーレイ・ネットワークにおいて公開され、それらのサービス記述言語の各々は、公開サービスを見つけるのに使用するための対応するサービス発見プロトコルを有する。Ｗｉｋｉｐｅｄｉａによって与えられているサービス発見の定義では、「サービス発見プロトコルとは、コンピュータ・ネットワーク上でデバイスとこれらのデバイスによって提供されるサービスとの自動検出を可能にするネットワーク・プロトコルである」と記載されている。言い換えれば、サービス発見とは、要求されたサービスのためのサービス・プロバイダを見つけるアクションである。要求されたサービスのロケーション（一般的にはサービス・プロバイダのアドレス）が検索されたとき、ユーザはさらに、そのロケーションにアクセスし、それを使用し得る。
【０００５】
概して、サービス発見プロトコルは、（ａ）オーバーレイ上でサービスを提供するサービス・プロバイダ、および（ｂ）サービスを使用するクライアントという、２つのエンティティを含む。一態様では、サービス・プロバイダの例には、印刷、スキャン、ファックス、ストレージ、音楽共有、ファイル共有、ゲーム、および映画チケット、ホテル、航空券の予約、またはオンライン・ゲームなどのためのウェブ・サービスなどのサービスを提供するノードがある。さらに、ネットワーク中のどんなノードもクライアントとして働くことができる。したがって、サービス発見の目的は、クライアントが、注目する特定のサービスのサービス・プロバイダを（そのようなサービスが存在する場合）見つけるのを助けることである。
【０００６】
ピアツーピア・オーバーレイ・ネットワークにおいてサービス発見が成功するためには、サービス・プロバイダは、サービス記述言語を使用してそのサービス・プロバイダの（１つまたは複数の）サービスを規定し、サービスに関するメタデータが、オーバーレイ中のノード上に何らかの検索可能な形式で記憶され、クライアントは、対応するサービスを見つけるのを助けるための問合せシステムに渡される検索可能キーワードを使用してサービス要求を表現することが可能でなければならない。
【０００７】
公開プロセスの一部として、キーワードが、サービス記述ドキュメントから抽出され、分散型ネットワーク上で分散的な方法で個別に公開される。次いで、個々のノードによって、キーワードおよび／またはサービスを発見するためのクエリが発行され得る。一般に、２つ以上のキーワードの検索を実行することは、キーワードのうちの１つを含むクエリが各ノードに送られる、ＡＮＤ検索を行うことを必要とする。同様に、ＯＲ検索は、クエリを形成する複数のキーワードのうちの１つまたは複数を含むクエリを各ノードに送ることによって実行される。そのような典型的な検索は高い通信コストに関連する。
【０００８】
したがって、複数キーワード・クエリを処理する方法をより効率的にし、通信コストが最適化されることが望ましいであろう。
【発明の概要】
【０００９】
以下で、１つまたは複数の態様の基本的理解を与えるために、そのような態様の簡略化された概要を提示する。この概要は、すべての企図された態様の包括的な概観ではなく、すべての態様の主要または重要な要素を識別するものでも、いずれかまたはすべての態様の範囲を定めるものでもない。その唯一の目的は、後で提示するより詳細な説明の導入として、１つまたは複数の態様のいくつかの概念を簡略化された形で提示することである。
【００１０】
一態様によれば、オーバーレイ・ネットワークにおいて検索する方法は、分散型ネットワーク中の第１のノードにおいてクエリを受信することであって、上記クエリが第１のキーワードと第２のキーワードとを含む、受信することと、上記第１のキーワードを含んでいるドキュメントの第１の数の第１のセットを見つけることと、上記第１のセット中のドキュメントの上記第１の数の関数として、最適な第１のブルーム・フィルタ長および対応するハッシュ関数の第１の数を計算することと、上記第１のセットの第１のブルーム・フィルタを、上記第２のキーワードをハッシングすることによって識別された上記分散型ネットワーク中の第２のノードに送ることであって、上記第１のブルーム・フィルタが上記第１のブルーム・フィルタ長とハッシュ関数の上記第１の数とを備える、送ることとを備える。
【００１１】
さらに別の態様は、分散型ネットワーク中の第１のノードにおいてクエリを受信するための第１のモジュールであって、上記クエリが第１のキーワードと第２のキーワードとを含む、第１のモジュールと、上記第１のキーワードを含んでいるドキュメントの第１の数の第１のセットを見つけるための第２のモジュールと、上記第１のセット中のドキュメントの上記第１の数の関数として、最適な第１のブルーム・フィルタ長および対応するハッシュ関数の第１の数を計算するための第３のモジュールと、上記第１のセットの第１のブルーム・フィルタを、上記第２のキーワードをハッシングすることによって識別された上記分散型ネットワーク中の第２のノードに送るための第４のモジュールであって、上記第１のブルーム・フィルタが上記第１のブルーム・フィルタ長とハッシュ関数の上記第１の数とを備える、第４のモジュールとを備える、ネットワークにおいてサービスを公開または発見するように構成された少なくとも１つのプロセッサに関係する。
【００１２】
さらに別の態様は、分散型ネットワーク中の第１のノードにおいてクエリを受信することをコンピュータに行わせるための第１のコード・セットであって、上記クエリが第１のキーワードと第２のキーワードとを含む、第１のコード・セットと、上記第１のキーワードを含んでいるドキュメントの第１の数の第１のセットを見つけることを上記コンピュータに行わせるための第２のコード・セットと、上記第１のセット中のドキュメントの上記第１の数の関数として、最適な第１のブルーム・フィルタ長および対応するハッシュ関数の第１の数を計算することを上記コンピュータに行わせるための第３のコード・セットと、上記第１のセットの第１のブルーム・フィルタを、上記第２のキーワードをハッシングすることによって識別された上記分散型ネットワーク中の第２のノードに送ることを上記コンピュータに行わせるための第４のコード・セットであって、上記第１のブルーム・フィルタが上記第１のブルーム・フィルタ長と数のハッシュ関数の上記第１の数とを備える、第４のコード・セットと、を備えるコンピュータ可読媒体を備える、コンピュータプログラム製品に関係する。
【００１３】
さらに別の態様は、分散型ネットワーク中の第１のノードにおいてクエリを受信するための手段であって、上記クエリが第１のキーワードと第２のキーワードとを含む、受信するための手段と、上記第１のキーワードを含んでいるドキュメントの第１の数の第１のセットを見つけるための手段と、上記第１のセット中のドキュメントの上記第１の数の関数として、最適な第１のブルーム・フィルタ長および対応するハッシュ関数の第１の数を計算するための手段と、上記第１のセットの第１のブルーム・フィルタを、上記第２のキーワードをハッシングすることによって識別された上記分散型ネットワーク中の第２のノードに送るための手段であって、上記第１のブルーム・フィルタが上記第１のブルーム・フィルタ長とハッシュ関数の上記第１の数とを備える、送るための手段とを備える、装置に関係する。
【００１４】
別の態様は、分散型ネットワークにおいて複数キーワード検索を実行するための装置であって、第１のキーワードと第２のキーワードとを含めて問い合わせるように構成された受信機と、上記第１のキーワードを含んでいるドキュメントの第１の数の第１のセットを見つけるように構成されたキーワード・セット判断構成要素と、上記第１のセット中のドキュメントの上記第１の数の関数として、最適な第１のブルーム・フィルタ長および対応するハッシュ関数の第１の数を計算し、上記第１のセットの第１のブルーム・フィルタを、上記第２のキーワードをハッシングすることによって識別された上記分散型ネットワーク中の第２のノードに送るように構成されたブルーム・フィルタ計算構成要素であって、第１のブルーム・フィルタが上記第１のブルーム・フィルタ長とハッシュ関数の上記第１の数とを備える、ブルーム・フィルタ計算構成要素とを備える装置に関係する。
【００１５】
上記および関連する目的を達成するために、１つまたは複数の態様は、以下で十分に説明し、特に特許請求の範囲で指摘する特徴を備える。以下の説明および添付の図面に、１つまたは複数の態様のいくつかの例示的な特徴を詳細に記載する。ただし、これらの特徴は、様々な態様の原理を採用することができる様々な方法のほんのいくつかを示すものであり、この説明は、すべてのそのような態様およびそれらの均等物を含むものとする。
【００１６】
添付の図面とともに以下に説明する開示する態様は、開示する態様を限定するためではなく、開示する態様を例示するために与えられ、同様の表示は同様の要素を示す。
【図面の簡単な説明】
【００１７】
【図１】ピアツーピア・ネットワークの一態様のブロック図。
【図２】ネットワークにおける、様々な異なるサービス記述言語をサポートするサービス公開のためのシステムの一態様の概略図。
【図３】説明する機能を実行するように構成されたコンピューティング・デバイスの一態様の概略図。
【図４】複数キーワード検索を実行する方法の一態様のフローチャート。
【図５Ａ】複数キーワード検索を実行する方法の追加の態様のフローチャート。
【図５Ｂ】複数キーワード検索を実行する方法の追加の態様のフローチャート。
【図６】複数キーワード検索を実行するためのシステムの一態様の概略図。
【発明を実施するための形態】
【００１８】
次に、図面を参照しながら様々な態様について説明する。以下の記述では、説明の目的で、１つまたは複数の態様の完全な理解を与えるために多数の具体的な詳細を記載する。ただし、そのような（１つまたは複数の）態様は、これらの具体的な詳細なしに実施され得ることは明らかであろう。
【００１９】
ピアツーピア・ネットワークなどの分散型ネットワークは、コンピュータ・ネットワーク上でデバイスとそれらのデバイスによって提供されるサービスとを発見する能力に依拠する。サービスを記述するために様々なサービス記述言語スキーマが使用され得る。本明細書で説明するシステムおよび方法は、分散型ネットワークに公開されているドキュメントを検索するためのシステムおよび方法を提供する。特に、説明するシステムおよび方法は、ＡＮＤ検索とＯＲ検索の両方に対してブルーム・フィルタの最適なパラメータ（ハッシュ関数のサイズおよび数）を見つけることを含む。
【００２０】
図１を参照すると、ピアツーピア・オーバーレイ・ネットワーク１００のブロック図が与えられている。ネットワーク１００は、インターネット・プロトコル・ネットワークなど、任意のタイプのネットワークを備える基礎をなすネットワーク１０２を備える。基礎をなすネットワーク１０２は単一のエンティティとして示されているが、基礎をなすネットワークは、ＷＡＮ、ＬＡＮ、ワイヤレス・ネットワーク、または他のタイプのネットワークなど、任意の数またはタイプのネットワークを備え得る。図１はピアツーピア・オーバーレイ・ネットワークを示しているが、本出願はオーバーレイ・ネットワークに限定されない。ピアツーピア・オーバーレイ・ネットワーク１００は、本明細書で説明する方法および装置を実装するために使用され得る分散型ネットワークの１つの例示的なタイプである。他のタイプの分散型ネットワークも採用され得る。その上、本明細書で説明するシステムおよび方法は、集中型ネットワークを含む、任意の他のタイプのネットワークに等しく適用可能である。たとえば、ネットワーク１００は、発見サービスを提供するサーバを含み得る。そのような場合、サーバは、発見に関係する情報をホスティングするディレクトリとして働き得る。たとえば、サーバは、ネットワーク中のノードによって公開されたキーワードおよび対応する情報をホスティングし得る。ノードはサーバに情報を公開し得、クエリもサーバに送られ得る。
【００２１】
一態様では、基礎をなすネットワーク１０２は複数のピアツーピア・ネットワーク（１０４、１０６、および１０８）を備える。ピアツーピア・ネットワーク１０４、１０６、および１０８はそれぞれ、基礎をなすネットワーク１０２のノードのサブセットを備え、それらのノードが通信できるようにするために基礎をなすネットワーク１０２のサービスを利用して動作する。たとえば、ピアツーピア・ネットワーク１０４、１０６、および１０８において、ノードは、基礎をなすネットワーク１０２によって与えられた通信リンクによって接続されて、所望のルーティング経路を形成する。ピアツーピア・ネットワーク１０４、１０６および、１０８は、任意のルーティング構成を可能にするために任意のトポロジーまたはアーキテクチャを有し得、図１に示す構成に限定されない。
【００２２】
ネットワーク１０４、１０６、および１０８などのピアツーピア・オーバーレイ・ネットワーク内で、各ノードはサービス・プロバイダおよび／またはクライアントとして動作することができる。すなわち、ノードは、オーバーレイにサービスを提供し得、１つまたは複数の他のノードのサービスを使用し得る。そのようなサービスは、たとえば、印刷、スキャン、ファックス、ストレージ、音楽共有、ファイル共有、ゲーム、および映画チケット、ホテル、航空券の予約、またはオンライン・ゲームなどのウェブ・サービスを含み得る。ただし、これらのサービス例は非限定的であり、実際のサービスは、記載したものよりも多いまたは少ないサービスを含み得ることに留意されたい。各ノードは、たとえば、パーソナルコンピュータ、ラップトップ・コンピュータ、ワイヤレス通信デバイス、携帯電話、携帯情報端末、プリンタ、ファックス装置、および／または任意の他のネットワーク接続可能コンピューティング・デバイスなど、コンピューティング・デバイスを備え得る。
【００２３】
サービス発見プロトコルは、クライアントとして働いているノードが、注目する特定のサービスのサービス・プロバイダを見つけるのを支援するために使用され得る。サービス・プロバイダは、たとえば、拡張可能なマークアップ言語（ＸＭＬ）、リサーチ記述フォーマット（ＲＤＦ）、ＲＤＦ−Ｓ、ウェブ・サービス記述言語（ＷＳＤＬ）、ＷＳＤＬ−Ｓ、オントロジーウェブ言語（ＯＷＬ）、サービス用オントロジーウェブ言語（ＯＷＬ−Ｓ）、Ｕｎｉｖｅｒｓａｌ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｄｉｓｃｏｖｅｒｙ  ａｎｄ  Ｉｎｔｅｇｒａｔｉｏｎ（ＵＤＤＩ）、ユニバーサルプラグアンドプレイ（ＵＰｎＰ）、および／または他のサービス記述言語など、サービス記述言語を使用してそのサービス・プロバイダのサービスを規定する。サービスに関するメタデータは、オーバーレイ中のノード上に検索可能なフォーマットで記憶され得、クライアントは、対応するサービスを見つけるのを助けるための問合せシステムに渡される検索可能キーワードを使用してサービス要求を表現し得る。
【００２４】
サービスに関するメタデータは、それのネイティブサービス記述フォーマットで直接記憶されるか、または検索可能スキーマに変換され得る。１つの可能な実装形態は、単にサービス記述からキーワードを抽出し、それらのキーワードをオーバーレイ上で公開し得よう。別の実装形態は、選択されたサービス記述フォーマットでキーワードを直接公開し得る。第３の実装形態は、サービス記述を検索可能スキーマに変換し得よう。
【００２５】
図２に、様々な異なるサービス記述言語をサポートするサービス公開のための例示的なシステム２００を示し、説明する態様は、他の同様のそのようなシステムに拡張され得る。システム２００は、ピアツーピア・ネットワーク上で広告し、発見されるサービスへの共通フレームワークを与える。図２に示すように、サービス記述のデータ２０２は、たとえば、ＸＭＬ、ＸＤＳ、ＲＤＦ、ＲＤＦ−Ｓ、ＷＳＤＬ、ＵＤＤＩ、ＵＰｎＰ、ＯＷＬ、ＯＷＬ−ｓなど、任意のサービス記述言語／スキーマ２０４を使用して公開され得る。正規化スキーマ２０９に基づいて、サービス記述を、それのネイティブ形式から、たとえば、それぞれのサービス記述言語２０４の形式から検索可能サービス記述２０８に変換するための１つまたは複数のプラグイン・モジュール２０６が与えられ得る。次いで、検索可能サービス記述２０８はオーバーレイ・ネットワーク２１０上で公開され得る。
【００２６】
検索可能サービス記述２０８は、サービス発見に必要な情報、およびサービスを順位付けしサービスにアクセスするために必要な情報のすべてのアグリゲーションを可能にする。検索可能サービス記述２０８を公開することは、ネイティブサービス記述からキーワードを抽出することを含み得る。キーワードは、たとえば、ＸＭＬ属性値ペア、ＲＤＦトリプル、単純なキーワードとして抽出され得、または任意の他の抽出方法に従って抽出され得る。プラグイン・モジュール２０６は、抽出すべき特定のフィールドと、それらのフィールドを抽出するためのフォーマットとを定義する正規化スキーマ２０９を与える。正規化スキーマ２０９は、サービス記述言語の機能のすべてを提供するわけではないので、サービス記述言語ではない。変換器の使用とは異なり、プラグイン・モジュール２０６は、１つのサービス記述言語から１つまたは複数の他のサービス記述言語に変換しない。そうではなく、プラグイン・モジュール２０６は、正規化スキーマ２０９に基づいて元のサービス記述からあるデータを抽出することを可能にする。たとえば、正規化スキーマ２０９によって指定されたフィールドは、ネイティブサービス記述２０４において特定のデータにマッピングされる。したがって、正規化スキーマ２０９に従って抽出された情報がオーバーレイ・ネットワーク上で公開される。したがって、各々が異なるサービス記述言語にある、複数のバージョンのサービス記述をネットワーク上に公開するのではなく、任意のノードによって検索および認識され得る単一の記述がネットワークに公開され得る。
【００２７】
代替的に、ネットワークは、１つの特定のサービス記述フォーマットが使用されるべきであり、さらに、すべてのサービス公開／発見がそのフォーマットに基づくことをアプリオリに決定し得る。
【００２８】
オーバーレイ・ネットワーク２１０中の各ノードは、データの記憶および検索におけるネットワーク効率を高めるためにネットワーク上でデータを配信するように、パーティションと呼ばれるオーバーレイ・ネットワークデータの部分を記憶するように構成され得る。ネットワーク上に記憶されたデータの概要を表すために、列がドキュメントを表し、行がドキュメント中の用語を表す用語頻度テーブル（term-frequency table）が使用され得る。用語頻度テーブルは、データベースに関する有益な情報を提供し、いくつかのタイプの検索のために使用され得る。
【００２９】
ネットワーク上でのデータの配信は、用語頻度テーブルを使用して様々な方法で実行され得る。たとえば、キーワードによるパーティション手法が使用され得、その場合、用語頻度テーブルは行によって分割され、各行または行のセットは、ハッシュ関数に基づいて特定のノードにランダムに割り当てられる。ハッシュ関数は、キーワードの所有権を異なるノードに配信するために使用される。このようにして、各ノードは、キーワードの特定のセットに対する責任を負う。
【００３０】
図３に、分散型ネットワークにおいてノードとして働き得る例示的なコンピューティング・デバイス３００を示す。コンピューティング・デバイス３００は、本明細書で説明する構成要素および機能のうちの１つまたは複数に関連する処理機能を実行するためのプロセッサ３０２を含む。プロセッサ３０２は、プロセッサまたはマルチコアプロセッサの単一または複数のセットを含むことができる。さらに、プロセッサ３０２は、統合処理システムおよび／または分散処理システムとして実装され得る。
【００３１】
コンピューティング・デバイス３００は、プロセッサ３０２によって実行されているアプリケーションのローカルバージョンを記憶することなどのためのメモリ３０４をさらに含む。メモリ３０４は、ランダム・アクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、テープ、磁気ディスク、光ディスク、揮発性メモリ、不揮発性メモリ、およびそれらの任意の組合せなど、コンピュータが使用できる任意のタイプのメモリを含むことができる。
【００３２】
さらに、コンピュータ・デバイス３００は、本明細書で説明するように、ハードウェア、ソフトウェア、およびサービスを利用して、１つまたは複数の相手との通信を確立し、維持することを行う通信構成要素３０６を含む。通信構成要素３０６は、コンピューティング・デバイス３００上の構成要素間の通信、ならびにコンピューティング・デバイス３００と、通信ネットワーク上に位置するデバイス、および／またはコンピューティング・デバイス３００に直列もしくはローカルに接続されたデバイスなどの外部デバイスとの間の通信を伝え得る。たとえば、通信構成要素３０６は、１つまたは複数のバスを含み得、それぞれ送信機および受信機に関連する、外部デバイスとインターフェースするように動作可能な送信チェーン構成要素および受信チェーン構成要素をさらに含み得る。さらに、たとえば、通信構成要素３０６は、コンピューティング・デバイス３００が分散型ネットワーク中の他のノードと通信することに可能にするように構成され得る。
【００３３】
さらに、コンピューティング・デバイス３００は、データ・ストア３０８をさらに含み得、データ・ストア３０８は、本明細書で説明する態様に関連して採用される情報、データベース、およびプログラムの大容量記憶を与えるハードウェアおよび／またはソフトウェアの任意の適切な組合せとすることができる。たとえば、データ・ストア３０８は、プロセッサ３０２によって現在実行されていないアプリケーションのためのデータリポジトリであり得る。
【００３４】
コンピューティング・デバイス３００は、さらに、コンピューティング・デバイス３００のユーザから入力を受信するように動作可能であり、ユーザへの提示のための出力を生成するようにさらに動作可能なユーザ・インターフェース構成要素３１０を含み得る。ユーザ・インターフェース構成要素３１０は、限定はしないが、キーボード、テンキー、マウス、タッチセンシティブディスプレイ、ナビゲーションキー、ファンクションキー、マイクロフォン、音声認識構成要素、ユーザから入力を受信することが可能な他の機構、またはそれらの任意の組合せを含む、１つまたは複数の入力デバイスを含み得る。さらに、ユーザ・インターフェース構成要素３１０は、限定はしないが、ディスプレイ、スピーカー、触覚フィードバック機構、プリンタ、出力をユーザに提示することが可能な他の機構、またはそれらの任意の組合せを含む、１つまたは複数の出力デバイスを含み得る。
【００３５】
コンピューティング・デバイス３００はまた、１つまたは複数の検索可能スキーマ・プラグイン・モジュール２０６を含み得る。たとえば、１つまたは複数のプラグイン・モジュール２０６はメモリ３０４に記憶され得る。各スキーマ・プラグイン・モジュール２０６は、正規化スキーマ２０９に基づいて任意のサービス記述言語２０４で書かれたサービス記述から検索可能サービス記述２０８（図２）を生成するように構成され得る。検索可能サービス記述２０８は、ネットワークに公開され、サービスについてクエリを処理するために使用される。検索可能サービス記述２０８を生成することは、ネイティブ形式のサービス記述からキーワードを抽出し、次いで、ネットワーク上に検索可能サービス記述２０８のフォーマットでこれらのキーワードを広告することを含む。
【００３６】
コンピューティング・デバイス３００は、ユーザ・クエリを受信するように構成されたクエリ受信モジュール３２０をさらに備え得る。クエリ受信モジュール３２０は、ネットワーク中のどの１つまたは複数のノードが、クエリを形成する特定のキーワードを担当しているかを判断するようにさらに構成され得る。上記で説明したように、ネットワークは、キーワードによるパーティション手法を実装し得、その場合、用語頻度テーブルは行によって分割され、各行または行のセットは特定のノードにランダムに割り当てられる。したがって、クエリ受信モジュール３２０は、用語頻度テーブルに基づいてクエリ・キーワードを担当している１つまたは複数のノードを判断するように構成され得る。担当している（１つまたは複数の）ノードを判断するために、ハッシュ関数が実装され得る。クエリ受信モジュール３２０は、さらに、処理のためにクエリを適切な（１つまたは複数の）ノードにルーティングするように構成され得る。たとえば、いくつかの事例において、クエリ受信モジュール３２０は、クエリをそれにフォワーディングするための第１のノードを選択するように構成され得、第１のノードは、クエリにおける第１のキーワードを担当する。クエリ受信モジュール３２０はまた、ネットワーク中の他のノードから検索の結果を受信し、その結果をユーザにフォワーディングするように構成され得る。
【００３７】
コンピューティング・デバイス３００は、ネットワーク上に記憶されたデータおよび／またはドキュメントについてのクエリを処理するように構成されたクエリ処理モジュール３３０をさらに備え得る。クエリ処理モジュール３３０は、ノードが担当しているキーワードについてのキーワード・クエリに一致するドキュメントのセットを判断するように構成されたキーワード・セット判断サブモジュール３３２を備え得る。
【００３８】
クエリ処理モジュール３３０はさらにブルーム・フィルタ計算サブモジュール３３４を備え得る。ブルーム・フィルタ計算サブモジュールは、キーワード・セット判断サブモジュール３３２によって判断されたドキュメントのセットを表すために最適にサイズ決定されたブルーム・フィルタを判断するように構成され得る。たとえば、ブルーム・フィルタの長さは、セット中のドキュメントの数の関数として判断され得る。ブルーム・フィルタは、要素がセットの要素であるかどうかをテストするために使用される空間効率の良い確率的データ構造である。ブルーム・フィルタのために複数のハッシュ関数が定義され得、それらのハッシュ関数の各々は、何らかのセット要素を一様なランダム分布でＬ配列位置のうちの１つにマッピングまたはハッシングする。要素について問い合わせる、すなわち、または要素がセット中に存在するかどうかをテストするために、要素はハッシュ関数に入力として与えられて、配列位置を得る。これらの位置のビットのいずれかが０である場合、要素はセット中にない。そうではなく、すべてが１である場合、要素はセット中にあるか、または他の要素の挿入中にビットが１に設定されたかのいずれかである。
【００３９】
ブルーム・フィルタを使用する１つの利点は、ブルーム・フィルタが大量の圧縮を与えるということである。ただし、その結果、フォールス・ポジティブ（false positive）が発生し得る。すなわち、ブルーム・フィルタは、要素がセットの一部でないとき、その要素がセットの一部であると示すことがある。これは、たとえば、その要素に対応するすべてのロケーションが、他の要素の挿入中にすでに１に設定されているときに起こり得る。したがって、ブルーム・フィルタ計算サブモジュール３３４は、フォールス・ポジティブを訂正するように構成され得る。
【００４０】
クエリ処理モジュール３３０はまた、ＡＮＤクエリおよびＯＲクエリなど、複数キーワード・クエリを処理するように構成された複数キーワード処理モジュール３３６を含み得る。ＡＮＤクエリは、セット中の各ドキュメントが、クエリの一部を形成するあらゆるキーワードを含んでいる、ドキュメントのセットを判断しようと努める。ＯＲクエリは、セット中の各ドキュメントが、クエリ中で指定された少なくとも１つのキーワードを含んでいる、ドキュメントのセットを判断しようと努める。複数キーワード処理モジュール３３６は、ネットワーク中の２つ以上のノードからのドキュメントの受信セットのインターセクション（intersection）を計算するために、ブルーム・フィルタ計算サブモジュール３３４とともに動作し得る。
【００４１】
図４は、受信した複数キーワード・クエリを処理するための例示的な方法を示すフローチャートである。４０２に示すように、第１のノードは、複数のキーワードを備えるクエリを受信し得る。クエリは、たとえば、ＡＮＤクエリ、およびＯＲクエリ、または複合ＡＮＤ／ＯＲクエリであり得る。クエリは、受信しているノードがクエリ中の第１のキーワードを担当していると判断したネットワーク中の別のノード（問合せノード）から受信され得る。
【００４２】
４０４に示すように、第１のノードは、クエリ中で指定された第１のキーワードを含んでいるドキュメントのセットを判断する。第１のノードは、クエリワードについて第１のノードのメモリをスキャンし、第１のノードがそのメモリに内部的に記憶した用語頻度テーブルの対応する行を抽出することによって、適切なドキュメントを判断し得る。次いで、ノードは、選択された行において０でないエントリを有するドキュメントのセットを見つける。
【００４３】
４０６に示すように、第１のノードは、クエリ・キーワードクを含んでいるドキュメントのセットを表すために最適なブルーム・フィルタを計算し得る。これは、たとえば、キーワードを含んでいるドキュメントのセットのサイズに基づいて、検索プロセスに必要なブルーム・フィルタのサイズを計算することを含み得る。次いで、ノードは、ドキュメントのセット中の各ドキュメントのドキュメント識別子をブルーム・フィルタ上にハッシングし得る。次いで、４０８に示すように、第１のノードは、計算されたブルーム・フィルタおよびそれの係数とともに、初期クエリを、その初期クエリ中の第２のキーワードを担当している第２のノードに送る。いくつかの実装形態では、第１のノードは、第２のキーワードを担当しているノードを判断するように構成され得る。他の実装形態では、第２の（および後続の）キーワードを担当しているノードは、問合せノードによってあらかじめ決定され得る。
【００４４】
４１０に示すように、クエリがＡＮＤクエリである場合、第１のノードは第２のノードから検索結果を受信し得る。第１のノードは、たとえば、フォールス・ポジティブについて第２のノードによって戻されたドキュメントのセットを検査することによって、検索結果を検証し得る。すなわち、第１のノードは、第２のノードによって戻されたドキュメントのセットを検査して、セットが、第１のキーワードを含んでいないドキュメントを含んでいるかどうかを確かめ得る。いずれのそのようなフォールス・ポジティブも第１のノードによって除去され得る。４１２に示すように、第１のノードは検索結果を問合せノードに戻し得る。クエリがＯＲクエリである場合、第１のノードは、４１４に示すように、第２のノードから肯定応答メッセージを受信すると、第１のキーワードに一致するドキュメントのリストを問合せノードに送り得る。
【００４５】
図４に関して上記で説明したように、第１のノードからクエリとブルーム・フィルタとを受信する第２のノードによって実行される方法は、検索がＡＮＤ検索であるかＯＲ検索であるかに応じて異なり得る。図５Ａに、ＡＮＤ検索を実行するために第２のノードによって実装され得る方法を示す。図４、ステップ４０８に示すように、第１のノードがそれのブルーム・フィルタを計算した後、第１のノードは、初期クエリおよびその計算されたブルーム・フィルタを、クエリ中の第２のキーワードを担当している第２のノードに送る。５０２Ａに示すように、第２のノードは、第１のノードからクエリとブルーム・フィルタとを受信する。次いで、５０４Ａに示すように、第２のノードは、第２のキーワードに一致するドキュメントのセットを判断する。ドキュメントのセットを判断することは、第１のキーワードに関して上記で説明したように実行され得る。次いで、５０６Ａに示すように、第２のノードは、第１のノードによって計算されたブルーム・フィルタを介して、第２のキーワードに一致するドキュメントの判断されたセットのあらゆる要素のメンバーシップを検査する。次いで、第２のノードは、インターセクションＤ２∩ＢＦ（Ｄ１）を計算することによってそれの検索結果を計算し、ただし、Ｄ２はドキュメントの第２のセットを表し、ＢＦ（Ｄ１）はドキュメントの第１のセットのブルーム・フィルタを表し、そして５０８Ａに示すように、検索結果を第１のノードに戻す。次いで、第１のノードは、図４、ステップ４１２に示すように、ドキュメントのリストを問合せノードに送り得る。
【００４６】
図５Ｂに、ＯＲ検索を実行するために第２のノードによって実装され得るプロセスを示す。ステップ５０２Ｂ、５０４Ｂ、および５０６Ｂはステップ５０２Ａ、５０４Ａ、および５０６Ａと同じであり、第２のノードは、第１のノードからクエリとブルーム・フィルタとを受信し、第２のキーワードに一致するドキュメントのセットを判断し、次いで、第１のノードによって計算されたブルーム・フィルタを介して、第２のキーワードに一致するドキュメントの判断されたセットのあらゆる要素のメンバーシップを検査する。５０８Ｂに示すように、第２のノードは、まだ第１のノードのブルーム・フィルタ中に存在しないドキュメントを問合せノードに戻す。第２のノードはまた、第１のノードにＡＣＫ応答を送り得る。次いで、問合せノードは、第２のノードから得られた受信セットＤ２−ＢＦ（Ｄ１）（Ｄ２はドキュメントの第２のセットであり、ＢＦ（Ｄ１）はドキュメントの第１のセットのブルーム・フィルタである）と、第１のノードから得られたドキュメントの第１のセットとのユニオン（union）を取り出して、検索プロセスを完了し得る。
【００４７】
ＡＮＤ検索では、フォールス・ポジティブの通信コストおよび確率は、ブルーム・フィルタ長（Ｌs）とハッシュ関数の数（ｒs）との適切な選定によって低減され得る。Ｌsおよびｒsは以下の式を使用して計算され得る。
【数１】
0005497172.tif 000002
【００４８】
本明細書で説明する方法は、２つを超えるキーワード用語に関与するＡＮＤクエリへと拡張され得る。たとえば、ユーザが「ｋ１およびｋ２およびｋ３および．．．ｋｑ」の形式のクエリを発行したとき、以下のステップが実行される。
【００４９】
（１）クエリがノードｎ１＝ｈａｓｈ（ｋ１）に送られる。
【００５０】
（２）ノードｎ１は、ノードｎ１のローカル転置索引（inverted index）リストを見て、キーワードｋ１を含んでいるドキュメントＤ１のセットを見つける。ｎ１は、セットＤ１のサイズを入力として、それぞれ（３）および（４）を使用してブルーム・フィルタのサイズおよびｒの値を計算する。
【００５１】
（３）ノードｎ１は、Ｄ１中のすべてのドキュメントＩＤをブルーム・フィルタ上に追加し、フィルタ係数をノードｎ２＝ｈａｓｈ（ｋ２）に送る。
【００５２】
（４）ｎ１からクエリを受信すると、ノードｎ２は、ノードｎ２のローカル転置索引を見て、キーワードｋ２を含んでいるドキュメントＤ２のリストを見つける。ｎ２は、ブルーム・フィルタＢＦ（Ｄ１）を介してＤ２のあらゆる要素のメンバーシップを検査し、インターセクションＤ２∩ＢＦ（Ｄ１）を計算する。
【００５３】
（５）ｎ２は、セットＤ２∩ＢＦ（Ｄ１）のサイズを入力として、
【数２】
0005497172.tif 000003
【００５４】
のようにブルーム・フィルタのサイズを計算する。
【００５５】
ｒsの値は、Ｌsの新しい値を用いて、
【数３】
0005497172.tif 000004
【００５６】
のように計算される。ｎ２はフィルタ係数をノードｎ３＝ｈａｓｈ（ｋ３）に送る。
【００５７】
（６）クエリ中のｑ個のすべてのキーワードについてステップ（５）および（６）を繰り返す。各ステップにおいて、（９）を使用してＬsの新しい値を計算し、ｒsの値を更新する。
【００５８】
（７）次いで、ノードｎｑ＝ｈａｓｈ（ｋｑ）が、ＩＤのリストを前のノードｎq-1＝ｈａｓｈ（ｋq-1）に戻す。
【００５９】
（８）ノードｎq-1は、受信したセットと、ノードｎq-1が所有するセットＤq-1とのインターセクションを実行し、ドキュメントの得られたリストをｎq-2＝ｈａｓｈ（ｋq-2）に戻す。
【００６０】
（９）最終応答がｎ１＝ｈａｓｈ（ｋ１）に達するまで、ステップ（７）および（８）を繰り返す。
【００６１】
（１０）ノードｎ１は、受信したセットとセットＤ１とのインターセクションを実行し、ドキュメントの得られたリストをソースに戻す。
【００６２】
通信コストをさらに低減するために、｜Ｄｊ｜（１≦ｊ≦ｑ）のサイズに関する事前知識が使用され得る。クエリは、最初にノード
【数４】
0005497172.tif 000005
【００６３】
に送られ得、次いで、｜Ｄｊ｜の２番目の最小値を有するノードｊ’にルーティングされ得、以下同様である。このようにして、通信データの量は著しく低減され得る。｜Ｄｊ｜のサイズの推定値をアプリオリに得るためにキャッシング技法が採用され得、これらの推定値は、ブルーム・フィルタのサイズを判断するために使用され得る。
【００６４】
ＯＲ検索では、フィルタ長Ｌsと、ハッシュ関数の数ｒsとは、リコール（recall）を所望の値より上に維持しながらブルーム・フィルタによる節約を最大にすることを目的とした、制約付き最適化問題を解くことによって取得され得る。
【数５】
0005497172.tif 000006
【００６５】
ＯＲ検索を実行するための本明細書で説明する方法は、２つを超えるキーワード用語に関与するＯＲクエリへと拡張され得る。たとえば、ユーザが「ｋ１またはｋ２またはｋ３または．．．ｋｑ」の形式のクエリを発行したとき、以下のステップが実行される。
【００６６】
（１）クエリがノードｎ１＝ｈａｓｈ（ｋ１）に送られる。
【００６７】
（２）ノードｎ１は、ノードｎ１のローカル転置索引リストを見て、キーワードｋ１を含んでいるドキュメントＤ１のセットを見つける。ｎ１は、セットＤ１のサイズを入力として、それぞれ（１５）および（１６）を使用してブルーム・フィルタのサイズおよびｒの値を計算する。
【００６８】
（３）ノードｎ１は、Ｄ１中のすべてのドキュメントＩＤをブルーム・フィルタ上に追加し、フィルタ係数をノードｎ２＝ｈａｓｈ（ｋ２）に送る。ノードｎ１はＤ１を問合せノードに送る。
【００６９】
（４）ｎ１からブルーム・フィルタとクエリとを受信すると、ノードｎ２は、ノードｎ２のローカル転置索引を見て、キーワードｋ２を含んでおり、ｎ１によって送られたブルーム・フィルタ中に含まれていないドキュメントＤ２のリストを見つける。ｎ２は、これらの追加のドキュメントＩＤを問合せノードに送り、受信データに対する肯定応答をｎ１に送る。
【００７０】
（５）ｎ２は、これらの追加のドキュメントＩＤ（Ｄ２−ＢＦ（Ｄ１））をＢＦ（Ｄ１）に追加する。合成ブルーム・フィルタはＢＦ（Ｄ１，Ｄ２）と呼ばれるが、Ｄ２中のいくつかのＩＤは、ブルーム・フィルタにおいて起こり得る衝突によりステップ（４）において省略され得るので、これは、ＢＦ（Ｄ１∪Ｄ２）とは異なり得ることに留意されたい。ｎ２はフィルタ係数ＢＦ（Ｄ１，Ｄ２）をノードｎ３＝ｈａｓｈ（ｋ３）に送る。
【００７１】
（６）クエリ中のｑ個のすべてのキーワードについてステップ（４）および（５）を繰り返す。クエリが第ｉのノードｎｉ＝ｈａｓｈ（ｋｉ）にあるとき、ノードｎｉは、ＢＦ（Ｄ１，Ｄ２，．．．，Ｄi-1）において省略されたドキュメントＩＤを問合せノードに送り、更新されたブルーム・フィルタＢＦ（Ｄ１，Ｄ２，．．．，Ｄi）をノードｎi+1＝ｈａｓｈ（ｋi+1）に送る。
【００７２】
（７）問合せノードは、ｑ個のノードから受信したすべてのドキュメントＩＤのユニオンを取り出して、検索を完了する。
【００７３】
通信コストをさらに低減するために、｜Ｄｊ｜（１≦ｊ≦ｑ）のサイズに関する事前知識が使用され得る。クエリは、最初にノード
【数６】
0005497172.tif 000007
【００７４】
に送られ得、次いで、｜Ｄｊ｜の２番目の最大値を有するノードｊ’にルーティングされ得、以下同様である。さらに、ブルーム・フィルタは、｜Ｄ１｜および／または｜Ｄ２｜が小さいときのみ、大きい節約を与えるのを助ける（付録Ｂの図を参照）。｜Ｄ１｜および／または｜Ｄ２｜の値が大きい場合、（ブルーム・フィルタの代わりに）実際のセットを送信することが推奨される。特に、
【数７】
0005497172.tif 000008
【００７５】
のとき、ブルーム・フィルタ手法を使用することが推奨される。
【００７６】
他の場合は、直接送信手法を使用することが推奨される。２つの対照的な手法の間のこの選定は、ステップ（２）において、ノードｎ１により、｜Ｄ１｜のノードｎ１の値と、｜Ｄ２｜のキャッシュされた値とを使用して行われ得る。
【００７７】
ブルーム・フィルタは、ＡＮＤタイプ検索とＯＲタイプ検索の両方について増分結果を生成するために使用され得る。クエリを発行しているユーザは、サービスを検索するとき、すべての結果を必要とすることはめったにない。ストリーミング転送を使用し、所望の数の結果のみを戻すことによって、送る必要がある情報の量は低減され得る。付録Ａおよび付録Ｂにおいてわかるように、クエリの通信コストはセット｜Ｄ１｜および／または｜Ｄ２｜のサイズに直接比例し、用語を含んでいるドキュメントの数が大きくなればなるほど、通信コストは高くなる。
【００７８】
ブルーム・フィルタは、増分リサーチを可能にすることによって通信コストを低減するのを助けることができる。ユーザがクエリ「ｋ１およびｋ２」を用いて固定数の結果を検索したとき、対応するノードｎ１およびｎ２は、その数に達するまで増分的に通信することができる。ノードｎ１は、ノードｎ１のブルーム・フィルタをチャンクで送り、ノードｎ２は、その対応するブルーム・フィルタチャンクに対する結果のセットのみを戻す。単一のブルーム・フィルタは、分割され、まだいかなる意味も保持することができないので、ドキュメントセットＤ１はセットにパーティショニングされる必要があり、次いで、チャンク・サイズをターゲットにしてブルーム・フィルタ長が設計され得る。このプロセスは、ノードｎ１がクエリについて固定数の結果を識別するまで繰り返され得る。同様の増分手法はＯＲ検索でも実行され得る。
【００７９】
ＡＮＤ検索とＯＲ検索の組合せである他のタイプのクエリ、たとえば、Ｑ＝（Ｑ１∪Ｑ２）∩（Ｑ３∪Ｑ４）などでは、マルチステッププロシージャが実装され得る。第１のステップにおいて、クエリは、たとえば、カルノー図またはクワイン−マクラスキーアルゴリズムを使用して、簡略化され、積和として表される。上記で例では、クエリＱはＱ＝（Ｑ１∩Ｑ３）∪（Ｑ１∩Ｑ４）∪（Ｑ２∩Ｑ３）∪（Ｑ２∩Ｑ４）として表される。
【００８０】
第２のステップにおいて、問合せノードｎQは、クエリをパースし、クエリを一連のＡＮＤクエリに分解する。この例では、問合せノードは、クエリＱを４つのクエリ、すなわち、以下のように分解するであろう。
【００８１】
１．（Ｑ１∩Ｑ３）、
２．（Ｑ１∩Ｑ４）、
３．（Ｑ２∩Ｑ３）、および
４．（Ｑ２∩Ｑ４）
これらの４つのクエリは個々のＡＮＤ検索として別々に実行され得、個々の結果が収集される。最終ステップにおいて、問合せノードは、これらの個々の結果のユニオンを実行して、検索クエリに対する最終的な答えを得る。
【００８２】
図６を参照すると、ネットワークにおいてサービスを公開し、発見するためのシステム６００が示されている。図示のように、システム６００はプロセッサ、ソフトウェア、またはそれらの組合せ（たとえば、ファームウェア）によって実装される機能を表すことができる機能ブロックを含む。システム６００は、連携して動作する電気構成要素の論理グルーピング６０２を含む。システム６００は、たとえば、分散型ネットワークにおいてノードとして働くコンピューティング・デバイスによって実装され得る。
【００８３】
論理グルーピング６０２は、第１のキーワードと第２のキーワードとを含むクエリを受信するためのモジュール６０４を含むことができる。その上、論理グルーピング６０２は、第１のキーワードを含んでいるドキュメントの第１の数の第１のセットを見つけるためのモジュール６０６を含むことができる。論理グルーピング６０２はさらに、第１のセット中のドキュメントの第１の数の関数として、最適な第１のブルーム・フィルタ長および対応するハッシュ関数の第１の数を計算するためのモジュール６０８と、第１のセットの第１のブルーム・フィルタを、第２のキーワードをハッシングすることによって識別された分散型ネットワーク中の第２のノードに送るためのモジュール６１０であって、第１のブルーム・フィルタが第１のブルーム・フィルタ長とハッシュ関数の第１の数とを備える、モジュール６１０とを含み得る。さらに、システム６００は、電気構成要素６０４〜６１０に関連する機能を実行するための命令を保持するメモリ６１８を含むことができる。メモリ６１８の外部にあるものとして示されているが、電気構成要素６０４〜６１０はメモリ６１８の内部に存在することができることを理解されたい。
【００８４】
本出願で使用する「構成要素」、「モジュール」、「システム」などの用語は、限定はしないが、ハードウェア、ファームウェア、ハードウェアとソフトウェアの組合せ、ソフトウェア、または実行中のソフトウェアなど、コンピュータ関連のエンティティを含むものとする。たとえば、構成要素は、プロセッサ上で実行されるプロセス、プロセッサ、オブジェクト、実行ファイル、実行スレッド、プログラム、および／またはコンピュータであり得るが、これらに限定されない。例として、コンピューティング・デバイス上で実行されるアプリケーションと、そのコンピューティング・デバイスの両方を構成要素とすることができる。１つまたは複数の構成要素がプロセスおよび／または実行スレッド内に常駐することができ、１つの構成要素を１つのコンピュータ上に配置し、および／または２つ以上のコンピュータ間に分散し得る。さらに、これらの構成要素は、様々なデータ構造を記憶している様々なコンピュータ可読媒体から実行することができる。これらの構成要素は、ローカルシステム、分散型システム内、および／または他のシステムを用いるインターネットなどのネットワーク上の別の構成要素と信号を介して対話する１つの構成要素からのデータなど、１つまたは複数のデータパケットを有する信号によるなど、ローカルプロセスおよび／またはリモートプロセスを介して通信し得る。
【００８５】
さらに、本明細書では、ワイヤード端末またはワイヤレス端末とすることができる端末に関する様々な態様について説明する。端末は、システム、デバイス、加入者ユニット、加入者局、移動局、モバイル、モバイルデバイス、リモート局、リモート端末、アクセス端末、ユーザ端末、端末、通信デバイス、ユーザエージェント、ユーザデバイス、またはユーザ機器（ＵＥ）と呼ばれることもある。ワイヤレス端末は、セルラー電話、衛星電話、コードレス電話、セッション開始プロトコル（ＳＩＰ）電話、ワイヤレス・ローカル・ループ（ＷＬＬ）局、携帯情報端末（ＰＤＡ）、ワイヤレス接続機能を有するハンドヘルド・デバイス、コンピューティング・デバイス、またはワイヤレスモデムに接続された他の処理デバイスであり得る。さらに、本明細書では基地局に関する様々な態様について説明する。基地局は、（１つまたは複数の）ワイヤレス端末と通信するために利用され得、アクセスポイント、ノードＢ、または何らかの他の用語で呼ばれることもある。
【００８６】
さらに、「または」という用語は、排他的な「または」ではなく、包括的な「または」を意味するものとする。すなわち、別段の規定がない限り、または文脈から明白でない限り、「ＸはＡまたはＢを使用する」という句は、自然な包括的置換のいずれかを意味するものとする。すなわち、「ＸはＡまたはＢを使用する」という句は、ＸがＡを使用する場合、ＸがＢを使用する場合、またはＸがＡとＢの両方を使用する場合のいずれによっても満たされる。さらに、本出願および添付の特許請求の範囲で使用する冠詞「ａ」および「ａｎ」は、別段の規定がない限り、または単数形を示すことが文脈から明白でない限り、概して「１つまたは複数」を意味するものと解釈すべきである。
【００８７】
本明細書で説明する技法は、ＣＤＭＡ、ＴＤＭＡ、ＦＤＭＡ、ＯＦＤＭＡ、ＳＣ−ＦＤＭＡおよび他のシステムなど、様々なワイヤレス通信システムに使用され得る。「システム」および「ネットワーク」という用語は、しばしば互換的に使用される。ＣＤＭＡシステムは、Ｕｎｉｖｅｒｓａｌ  Ｔｅｒｒｅｓｔｒｉａｌ  Ｒａｄｉｏ  Ａｃｃｅｓｓ（ＵＴＲＡ）、ｃｄｍａ２０００などの無線技術を実装し得る。ＵＴＲＡは、Ｗｉｄｅｂａｎｄ−ＣＤＭＡ（Ｗ−ＣＤＭＡ）およびＣＤＭＡの他の変形態を含む。さらに、ｃｄｍａ２０００は、ＩＳ−２０００、ＩＳ−９５およびＩＳ−８５６規格をカバーする。ＴＤＭＡシステムは、Ｇｌｏｂａｌ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｍｏｂｉｌｅ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ（ＧＳＭ(登録商標））などの無線技術を実装し得る。ＯＦＤＭＡシステムは、Ｅｖｏｌｖｅｄ  ＵＴＲＡ（Ｅ−ＵＴＲＡ）、Ｕｌｔｒａ  Ｍｏｂｉｌｅ  Ｂｒｏａｄｂａｎｄ（ＵＭＢ）、ＩＥＥＥ８０２．１１（Ｗｉ−Ｆｉ）、ＩＥＥＥ８０２．１６（ＷｉＭＡＸ）、ＩＥＥＥ８０２．２０、Ｆｌａｓｈ−ＯＦＤＭなどの無線技術を実装し得る。ＵＴＲＡおよびＥ−ＵＴＲＡは、Ｕｎｉｖｅｒｓａｌ  Ｍｏｂｉｌｅ  Ｔｅｌｅｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｓｙｓｔｅｍ（ＵＭＴＳ）の一部である。３ＧＰＰ  Ｌｏｎｇ  Ｔｅｒｍ  Ｅｖｏｌｕｔｉｏｎ（ＬＴＥ）は、ダウンリンク上ではＯＦＤＭＡを採用し、アップリンク上ではＳＣ−ＦＤＭＡを採用するＥ−ＵＴＲＡを使用するＵＭＴＳのリリースである。ＵＴＲＡ、Ｅ−ＵＴＲＡ、ＵＭＴＳ、ＬＴＥおよびＧＳＭは、「３ｒｄ  Ｇｅｎｅｒａｔｉｏｎ  Ｐａｒｔｎｅｒｓｈｉｐ  Ｐｒｏｊｅｃｔ」（３ＧＰＰ）と称する組織からの文書に記載されている。さらに、ｃｄｍａ２０００およびＵＭＢは、「３ｒｄ  Ｇｅｎｅｒａｔｉｏｎ  Ｐａｒｔｎｅｒｓｈｉｐ  Ｐｒｏｊｅｃｔ  ２」（３ＧＰＰ２）と称する組織からの文書に記載されている。さらに、そのようなワイヤレス通信システムは、追加として、不対無許可スペクトル、８０２．ｘｘワイヤレスＬＡＮ、ＢＬＵＥＴＯＯＴＨ(登録商標）、および任意の他の短距離または長距離ワイヤレス通信技法をしばしば使用するピアツーピア（たとえば、モバイル間の）アドホック・ネットワーク・システムを含み得る。
【００８８】
いくつかのデバイス、構成要素、モジュールなどを含み得るシステムに関して、様々な態様または特徴を提示する。様々なシステムは、追加のデバイス、構成要素、モジュールなどを含んでもよく、および／または各図に関連して論じるデバイス、構成要素、モジュールなどのすべてを含まなくてもよいことを理解および諒解されたい。これらの手法の組合せも使用され得る。
【００８９】
本明細書で開示する態様に関して説明する様々な例示的な論理、論理ブロック、モジュール、および回路は、汎用プロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールド・プログラマブル・ゲートアレイ（ＦＰＧＡ）または他のプログラマブル論理デバイス、個別ゲートまたはトランジスタ論理、個別ハードウェア構成要素、あるいは本明細書で説明する機能を実行するように設計されたそれらの任意の組合せを用いて実装または実行され得る。汎用プロセッサはマイクロプロセッサであり得るが、代替として、プロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサはまた、コンピューティング・デバイスの組合せ、たとえば、ＤＳＰとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、ＤＳＰコアと連携する１つまたは複数のマイクロプロセッサ、あるいは任意の他のそのような構成として実装され得る。さらに、少なくとも１つのプロセッサは、上記で説明したステップおよび／またはアクションの１つまたは複数を実行するように動作可能な１つまたは複数のモジュールを備え得る。
【００９０】
さらに、本明細書で開示する態様に関して説明する方法またはアルゴリズムのステップおよび／またはアクションは、直接ハードウェアで実施されるか、プロセッサによって実行されるソフトウェアモジュールで実施されるか、またはその２つの組合せで実施され得る。ソフトウェアモジュールは、ＲＡＭメモリ、フラッシュメモリ、ＲＯＭメモリ、ＥＰＲＯＭメモリ、ＥＥＰＲＯＭメモリ、レジスタ、ハードディスク、リムーバブルディスク、ＣＤ−ＲＯＭ、または当技術分野で知られている任意の他の形態の記憶媒体中に常駐し得る。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるようにプロセッサに結合され得る。代替として、記憶媒体はプロセッサに一体化され得る。さらに、いくつかの態様では、プロセッサおよび記憶媒体はＡＳＩＣ中に常駐し得る。さらに、ＡＳＩＣはユーザ端末中に常駐し得る。代替として、プロセッサおよび記憶媒体は、ユーザ端末中に個別構成要素として常駐し得る。さらに、いくつかの態様では、方法またはアルゴリズムのステップおよび／またはアクションは、コンピュータプログラム製品に組み込まれ得る、機械可読媒体および／またはコンピュータ可読媒体上のコードおよび／または命令の１つまたは任意の組合せ、あるいはそのセットとして常駐し得る。
【００９１】
１つまたは複数の態様では、説明する機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組合せで実装され得る。ソフトウェアで実装する場合、機能は、１つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶されるか、あるいはコンピュータ可読媒体上で送信され得る。コンピュータ可読媒体は、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む、コンピュータ記憶媒体と通信媒体の両方を含む。記憶媒体は、コンピュータによってアクセスされ得る任意の利用可能な媒体であり得る。限定ではなく例として、そのようなコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光ディスクストレージ、磁気ディスクストレージまたは他の磁気ストレージデバイス、あるいは命令またはデータ構造の形態の所望のプログラムコードを搬送または記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。また、どんな接続でもコンピュータ可読媒体と呼ばれることがある。たとえば、ソフトウェアが、同軸ケーブル、光ファイバケーブル、ツイストペア、デジタル加入者回線（ＤＳＬ）、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバケーブル、ツイストペア、ＤＳＬ、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。本明細書で使用するディスク（disk）およびディスク（disc）は、コンパクトディスク（disc）（ＣＤ）、レーザディスク（disc）、光ディスク（disc）、デジタル多用途ディスク（disc）（ＤＶＤ）、フロッピー（登録商標）ディスク（disk）およびブルーレイディスク（disc）を含み、ディスク（disk）は、通常、データを磁気的に再生し、ディスク（disc）は、通常、データをレーザで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含めるべきである。
【００９２】
上記の開示は例示的な態様および／または態様について論じたが、添付の特許請求の範囲によって定義された、説明した態様および／または態様の範囲から逸脱することなく、様々な変更および修正を本明細書で行うことができることに留意されたい。さらに、説明した態様および／または態様の要素が単数形で説明または請求されていることがあるが、単数形に限定することが明示的に述べられていない限り、複数形が企図される。さらに、態様および／または態様の全部または一部は、別段の記述がない限り、他の態様および／または態様の全部または一部とともに利用され得る。
【００９３】
付録Ａ
ＡＮＤ検索のためのブルーム・フィルタパラメータを導出すること
この付録では、ＡＮＤ検索のためのブルーム・フィルタのパラメータを取得する導出について提示する。一般性の損失なしに、「ｋ１およびｋ２」という形式の２キーワード・クエリを考察する。これらのキーワードを所有するノードがｎ１およびｎ２として示され、ｎ１＝ｈａｓｈ（ｋ１）およびｎ２＝ｈａｓｈ（ｋ２）であるとする。さらに、ここで、Ｄ１およびＤ２は、それぞれキーワードｋ１およびｋ２を含んでいるドキュメントのセットを示す。
【００９４】
ブルーム・フィルタの存在下での総通信コストは、次式のようになるものと示され得る。
【数８】
0005497172.tif 000009
【００９５】
ただし、Ｐcはブルーム・フィルタにおける衝突の確率である。式中に（１）からのＰcに代入すると、
【数９】
0005497172.tif 000010
【００９６】
この式からわかるように、通信コストの総量は、Ｌおよびｒの関数であり、これらのパラメータの適切な選定によって最小限に抑えられ得る。
【数１０】
0005497172.tif 000011
【００９７】
および
【数１１】
0005497172.tif 000012
【００９８】
を設定すると、
【数１２】
0005497172.tif 000013
【００９９】
ほとんどの場合、ノードｎ１は、セットＤ１に関する情報のみを有し、セットＤ２に関する情報は有しない。したがって、上記の２つの式はＤ２をも含むので、これらの式を使用してＬおよびｒの最適値を計算するのは不可能であろう。｜Ｄ２｜＝｜Ｄ１｜という仮定の下に値を計算することが提案される。Lsおよびrsとして示される、Ｌおよびｒの次に最適な（sub-optimal）値は、以下のようになるものと示され得る。
【数１３】
0005497172.tif 000014
【０１００】
以下の図に、｜Ｄ１｜の異なる値に対するＤ２のサイズの関数としての通信コストを示す。図の結果は５０％重複の下におけるものあり、ただし、５０％重複は、インターセクションのサイズが｜Ｄ１∩Ｄ２｜＝（５０／１００）×ｍｉｎ｛｜Ｄ１｜，｜Ｄ２｜｝になるポイントとして定義する。この図から２つの主要な結論が引き出され得る。第１に、この図は、｜Ｄ１｜および｜Ｄ２｜が増加するにつれて通信コストが増加することを示している。｜Ｄ１｜および｜Ｄ２｜が増加するにつれて｜Ｄ１∩Ｄ２｜のサイズは増加し、したがって、より多くのドキュメントＩＤがユーザに戻されるので、この結果は予想されるものである。第２に、図の結果は、
【数１４】
0005497172.tif 000015
【０１０１】
の代わりに次に最適な値Ｌsが使用されたとき、通信コストに関して多くの差異がないことを示唆している。これは、ノードｎ１が、フィルタのサイズを計算するための妥当な推定値として値｜Ｄ１｜を使用することができることを暗示している。
【表１】
0005497172.tif 000016
【０１０２】
付録Ｂ
ＯＲ検索のためのブルーム・フィルタパラメータを導出すること
この付録では、ＯＲ検索のためのブルーム・フィルタのパラメータを取得する導出について提示する。一般性の損失なしに、「ｋ１またはｋ２」という形式の２キーワード・クエリを提示する。これらのキーワードを所有するノードがｎ１およびｎ２として示され、ｎ１＝ｈａｓｈ（ｋ１）およびｎ２＝ｈａｓｈ（ｋ２）であるとする。さらに、Ｄ１およびＤ２が、それぞれキーワードｋ１およびｋ２を含んでいるドキュメントのセットを示すために使用される。
【０１０３】
検索アルゴリズムのパフォーマンスを研究し、トレードオフを理解するために、節約およびリコールレートを数学的に判断する。ブルーム・フィルタの場合、総通信コストは次式のようになるものと示され得る。
【数１５】
0005497172.tif 000017
【０１０４】
ただし、Ｐcは、（１）の場合のようにブルーム・フィルタにおける衝突の確率である。したがって、節約Ｓbの量は次式になる。
【数１６】
0005497172.tif 000018
【０１０５】
ブルーム・フィルタを使用する間に支払われるコストは、次式
【数１７】
0005497172.tif 000019
【０１０６】
のようになるものと示され得るリコールレートＲbに関する。
【０１０７】
フィルタ長Ｌと、ハッシュ関数の数ｒとの最適値は、Ｒb≧Ｒdesという制約の下でＳbを最大にすることを目的とした、制約付き最適化問題を解くことによって取得され得、ただし、Ｒdesは、設計されたリコールレートを示す。コスト関数Ｔb＝Ｓb＋λ（Ｒb−Ｒdes）を定義すると、Ｌとｒとの最適値は、
【数１８】
0005497172.tif 000020
【０１０８】
および
【数１９】
0005497172.tif 000021
【０１０９】
を設定することによって計算され得る。
【数２０】
0005497172.tif 000022
【０１１０】
値｜Ｄ２｜はノードｎ１においてアプリオリに知られないので、次に最適な解は、｜Ｄ２｜＝｜Ｄ１｜およびＤ１∩Ｄ２＝φの仮定の下で（１３）および（１４）を解くことによって得られる。これにより、
【数２１】
0005497172.tif 000023
【０１１１】
が与えられる。
【０１１２】
以下の図に、｜Ｄ１｜および｜Ｄ２｜の関数としての通信コストを示す。図の結果は、５０％重複の下におけるＲdes＝１−（１／２）9に関し、ただし、５０％重複は前述のように定義している。この図は、｜Ｄ１｜および｜Ｄ２｜が小さいとき、節約が大きくなり、いずれかのセットサイズが大きいとき、節約が０未満にさえ減少することを示している。
【表２】
0005497172.tif 000024
なお、以下に、出願当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］オーバーレイ・ネットワークにおいて検索する方法であって、
分散型ネットワーク中の第１のノードにおいてクエリを受信することであって、前記クエリが第１のキーワードと第２のキーワードとを含む、受信することと、
前記第１のキーワードを含んでいる第１の数のドキュメントの第１のセットを見つけることと、
前記第１のセット中の前記第１の数のドキュメントの関数として、最適な第１のブルーム・フィルタ長および対応する第１の数のハッシュ関数を計算することと、
前記第１のセットの第１のブルーム・フィルタを、前記第２のキーワードをハッシングすることによって識別された前記分散型ネットワーク中の第２のノードに送ることであって、前記第１のブルーム・フィルタが前記第１のブルーム・フィルタ長と前記第１の数のハッシュ関数とを備える、送ることと、
を備える方法。
［Ｃ２］前記クエリがＡＮＤクエリを備えるＣ１に記載の方法。
［Ｃ３］前記クエリがＯＲクエリを備えるＣ１に記載の方法。
［Ｃ４］前記クエリがＡＮＤクエリとＯＲクエリの組合せを備えるＣ１に記載の方法。
［Ｃ５］前記第１のセットＤ１の前記第１のブルーム・フィルタ長Ｌsを計算することが、以下の式
【数２２】
0005497172.tif 000025
に従って計算することをさらに備え、前記第１のセットＤ１の第１の数のハッシュ関数ｒsを計算することが、以下の式
【数２３】
0005497172.tif 000026
に従って計算することをさらに備えるＣ２に記載の方法。
［Ｃ６］前記第１のセットＤ１の前記第１のブルーム・フィルタ長Ｌsを計算することが、以下の式
【数２４】
0005497172.tif 000027
に従って計算することをさらに備え、前記第１のセットＤ１の第１の数のハッシュ関数ｒsを計算することが、以下の式
【数２５】
0005497172.tif 000028
に従って計算することをさらに備えるＣ３に記載の方法。
［Ｃ７］通信コストをさらに低減するために、それぞれのセット｜Ｄｊ｜のサイズに関する事前知識を使用することをさらに備えるＣ１に記載の方法。
［Ｃ８］ＡＮＤクエリを最適に実行するために、前記クエリをノード
【数２６】
0005497172.tif 000029
に送り、次いで、｜Ｄｊ｜の２番目の最小値を有する次のノードに送ることをさらに備えるＣ７に記載の方法。
［Ｃ９］ＯＲクエリを最適に実行するために、最初に前記クエリをノード
【数２７】
0005497172.tif 000030
に送り、次いで、｜Ｄｊ｜の２番目の最大値を有する次のノードに送ることをさらに備えるＣ７に記載の方法。
［Ｃ１０］クエリをどこにフォワーディングすべきかを判断するために、前記セット｜Ｄｊ｜の実際のまたは近似的サイズを判断するためのキャッシング技法を使用することをさらに備えるＣ７に記載の方法。
［Ｃ１１］クエリを処理するために前記第１のブルーム・フィルタを使用するまたは使用しないための条件を判断することであって、前記条件は、各セット｜Ｄｊ｜のサイズがいつアプリオリに知られるかを備える、判断することをさらに備えるＣ１に記載の方法。
［Ｃ１２］
【数２８】
0005497172.tif 000031
のときのみ、前記第１のブルーム・フィルタを前記計算することを実行し、ＯＲクエリのために前記第１のブルーム・フィルタを使用することをさらに備えるＣ１１に記載の方法。
［Ｃ１３］分散型ネットワーク中の第１のノードにおいてクエリを受信するための第１のモジュールであって、前記クエリが第１のキーワードと第２のキーワードとを含む、第１のモジュールと、
前記第１のキーワードを含んでいる第１の数のドキュメントの第１のセットを見つけるための第２のモジュールと、
前記第１のセット中の前記第１の数のドキュメントの関数として、最適な第１のブルーム・フィルタ長および対応する第１の数のハッシュ関数を計算するための第３のモジュールと、
前記第１のセットの第１のブルーム・フィルタを、前記第２のキーワードをハッシングすることによって識別された前記分散型ネットワーク中の第２のノードに送るための第４のモジュールであって、前記第１のブルーム・フィルタが前記第１のブルーム・フィルタ長と前記第１の数のハッシュ関数とを備える、第４のモジュールと、
を備える、ネットワークにおいてサービスを公開または発見するように構成された少なくとも１つのプロセッサ。
［Ｃ１４］分散型ネットワーク中の第１のノードにおいてクエリを受信することをコンピュータに行わせるための第１のコード・セットであって、前記クエリが第１のキーワードと第２のキーワードとを含む、第１のコード・セットと、
前記第１のキーワードを含んでいる第１の数のドキュメントの第１のセットを見つけることを前記コンピュータに行わせるための第２のコード・セットと、
前記第１のセット中の前記第１の数のドキュメントの関数として、最適な第１のブルーム・フィルタ長および対応する第１の数のハッシュ関数を計算することを前記コンピュータに行わせるための第３のコード・セットと、
前記第１のセットの第１のブルーム・フィルタを、前記第２のキーワードをハッシングすることによって識別された前記分散型ネットワーク中の第２のノードに送ることを前記コンピュータに行わせるための第４のコード・セットであって、前記第１のブルーム・フィルタが前記第１のブルーム・フィルタ長と前記第１の数のハッシュ関数とを備える、第４のコード・セットと、
を備えるコンピュータ可読媒体を備えるコンピュータプログラム製品。
［Ｃ１５］分散型ネットワーク中の第１のノードにおいてクエリを受信するための手段であって、前記クエリが第１のキーワードと第２のキーワードとを含む、受信するための手段と、
前記第１のキーワードを含んでいる第１の数のドキュメントの第１のセットを見つけるための手段と、
前記第１のセット中の前記第１の数のドキュメントの関数として、最適な第１のブルーム・フィルタ長および対応する第１の数のハッシュ関数を計算するための手段と、
前記第１のセットの第１のブルーム・フィルタを、前記第２のキーワードをハッシングすることによって識別された前記分散型ネットワーク中の第２のノードに送るための手段であって、前記第１のブルーム・フィルタが前記第１のブルーム・フィルタ長と前記第１の数のハッシュ関数とを備える、送るための手段と、
を備える装置。
［Ｃ１６］分散型ネットワークにおいて複数キーワード検索を実行するための装置であって、
第１のキーワードと第２のキーワードとを含めて問い合わせるように構成された受信機と、
前記第１のキーワードを含んでいる第１の数のドキュメントの第１のセットを見つけるように構成されたキーワード・セット判断構成要素と、
前記第１のセット中の前記第１の数のドキュメントの関数として、最適な第１のブルーム・フィルタ長および対応する第１の数のハッシュ関数を計算し、前記第１のセットの第１のブルーム・フィルタを、前記第２のキーワードをハッシングすることによって識別された前記分散型ネットワーク中の第２のノードに送るように構成されたブルーム・フィルタ計算構成要素であって、第１のブルーム・フィルタが前記第１のブルーム・フィルタ長と前記第１の数のハッシュ関数とを備える、ブルーム・フィルタ計算構成要素と、
を備える装置。
［Ｃ１７］前記クエリがＡＮＤクエリであるＣ１６に記載の装置。
［Ｃ１８］前記クエリがＯＲクエリであるＣ１６に記載の装置。
［Ｃ１９］前記クエリがＡＮＤクエリとＯＲクエリの組合せを備えるＣ１６に記載の装置。
［Ｃ２０］前記第１のセットＤ１の前記第１のブルーム・フィルタ長Ｌsを計算することが、以下の式
【数２９】
0005497172.tif 000032
に従って計算することをさらに備え、前記第１のセットＤ１の第１の数のハッシュ関数ｒsを計算することが、以下の式
【数３０】
0005497172.tif 000033
に従って計算することをさらに備えるＣ１７に記載の装置。
［Ｃ２１］前記第１のセットＤ１の前記第１のブルーム・フィルタ長Ｌsを計算することが、以下の式
【数３１】
0005497172.tif 000034
に従って計算することをさらに備え、前記第１のセットＤ１の第１の数のハッシュ関数ｒsを計算することが、以下の式
【数３２】
0005497172.tif 000035
に従って計算することをさらに備えるＣ１８に記載の装置。
［Ｃ２２］前記ブルーム・フィルタ計算構成要素が、通信コストをさらに低減するために、それぞれのセット｜Ｄｊ｜のサイズに関する事前知識を使用するようにさらに構成されるＣ１６に記載の装置。
［Ｃ２３］前記ブルーム・フィルタ計算構成要素が、ＡＮＤクエリを最適に実行するために、前記クエリをノード
【数３３】
0005497172.tif 000036
に送り、次いで、｜Ｄｊ｜の２番目の最小値を有する次のノードに送るようにさらに構成されるＣ２２に記載の装置。
［Ｃ２４］前記ブルーム・フィルタ計算構成要素が、ＯＲクエリを最適に実行するために、最初に前記クエリをノード
【数３４】
0005497172.tif 000037
に送り、次いで、｜Ｄｊ｜の２番目の最大値を有する次のノードに送るようにさらに構成されるＣ２２に記載の装置。
［Ｃ２５］前記ブルーム・フィルタ計算構成要素が、クエリをどこにフォワーディングすべきかを判断するために、前記セット｜Ｄｊ｜の実際のまたは近似的サイズを判断するためのキャッシング技法を使用するようにさらに構成されるＣ２２に記載の装置。
［Ｃ２６］前記ブルーム・フィルタ計算構成要素が、クエリを処理するために前記第１のブルーム・フィルタを使用するまたは使用しないための条件を判断するようにさらに構成され、前記条件は、各セット｜Ｄｊ｜のサイズがいつアプリオリに知られるかを備えるＣ１６に記載の装置。
［Ｃ２７］前記ブルーム・フィルタ計算構成要素が、
【数３５】
0005497172.tif 000038
のときのみ、前記第１のブルーム・フィルタを前記計算することを実行し、ＯＲクエリのために前記第１のブルーム・フィルタを使用するようにさらに構成されるＣ２６に記載の装置。
【図１】
0005497172.tif 000053
【図２】
0005497172.tif 000054
【図３】
0005497172.tif 000055
【図４】
0005497172.tif 000056
【図５Ａ】
0005497172.tif 000057
【図５Ｂ】
0005497172.tif 000058
【図６】
0005497172.tif 000059