1. A method of searching in an overlay network, comprising: receiving a query at a first node in a distributed network from a querying node, wherein the query includes a first keyword and a second keyword; finding a first set of a first number of documents that contain the first keyword; computing an optimal first Bloom filter length and a corresponding first number of hash functions as a function of the first number of documents in the first set; determining a second node responsible for finding a set of documents that contain the second keyword based on a hashed second keyword; generating a Bloom filter of the first set comprising an array having the first Bloom filter length and the first number of hash functions; sending the first Bloom filter of the first set to the second node in the distributed network to generate a result for the searching; returning, by the first node, documents consisting of the first set of documents to the querying node; finding, at the second node, a second set of a second number of documents that contain the second keyword; checking, at the second node, a membership of each of the documents in the second set over the first Bloom filter to determine a third set of documents that contain the second keyword and are not already present in the first Bloom filter; and returning, by second node, documents consisting of the third set of documents to the querying node.
1. A method of searching in an overlay network, comprising: receiving a query at a first node in a distributed network from a querying node, wherein the query includes a first keyword and a second keyword; finding a first set of a first number of documents that contain the first keyword; computing an optimal first Bloom filter length and a corresponding first number of hash functions as a function of the first number of documents in the first set; determining a second node responsible for finding a set of documents that contain the second keyword based on a hashed second keyword; generating a Bloom filter of the first set comprising an array having the first Bloom filter length and the first number of hash functions; sending the first Bloom filter of the first set to the second node in the distributed network to generate a result for the searching; returning, by the first node, documents consisting of the first set of documents to the querying node; finding, at the second node, a second set of a second number of documents that contain the second keyword; checking, at the second node, a membership of each of the documents in the second set over the first Bloom filter to determine a third set of documents that contain the second keyword and are not already present in the first Bloom filter; and returning, by second node, documents consisting of the third set of documents to the querying node. 5. The method of claim 1 , wherein computing the first Bloom filter length, L s , for the first set, D1, further comprises computing according to the following equation: L s =  D ⁢ ⁢ 1  ( ln ⁢ ⁢ 2 ) 2 × ln ⁡ ( 1 2 · 1 1 - R des ) and wherein computing first number of hash functions, r s , for the first set, D1, further comprises computing according to the following equation: r s = log 2 ⁡ ( 1 2 · 1 1 - R des ) wherein R des is a desired recall rate of the Bloom filter.