ピアツーピア検索エンジンシステム
このプロジェクトは、Kamilataプロトコルのライブラリとしての実装です。 Kamilataは、オープンネットワークで信頼できない検索を可能にします。このライブラリは、あらゆるタイプのデータを処理し、LIBP2Pアプリケーションに簡単に統合できます。
いくつかのユースケースが可能です:
ランキングアルゴリズムはあなた次第です。このライブラリは、順序付けられていない検索結果のストリームのみを提供するからです。これらの結果に含めるメタデータに基づいて、あなたが望むようにそれらをランク付けすることができます。
Kamilataは、上記のプロパティを提供しながら、世界で最初のシステムですが、それでもスケーラブルです。実際、ネットワークには、何億もの文書と数十万のノードを問題なく含めることができます。実際の制限は不明です。
このライブラリは、Ammarus IPFS検索エンジンに駆動します。
それはすべて、私が最大に最適化した最も素朴なアプローチから始まります。各保管ドキュメントのピアのネットワークを想像してください(これらのドキュメントは、人気がある場合は複数のピアで再現できます)。ピアがドキュメントを検索したい場合、ネットワーク内のすべてのピアにクエリを送信します。ネットワークにクエリがあふれているため、ピアが多すぎると機能しなくなります。
これを解決するために、検索者が一致するドキュメントを持っているピアにのみクエリをルーティングできるようにするルーティングアルゴリズムを追加しました。これのおかげで、クエリはすべての役に立たない仲間をスキップします。これで、クエリに関係なく、一致するドキュメントのリストを一定の速度でダウンロードできます。検索速度は、ネットワークのサイズに依存します。新しい結果はすべてのhホップを受け取ります。ここで、 h = ln(n)/ln(c) nのピア数とc各ピアが他のピアに持っている接続の数。これは、 cが100である場合、3を超えるh蜂を蜂の巣に入れているため、ネットワークには100万人以上のピアが必要です。その後、結果は、含まれるメタデータに基づいて自由にランク付けできます。
Kamilataルーティングアルゴリズムは、弱毒化されたブルームフィルターに基づいています。ブルームフィルターは、要素がセットに存在するかどうかを判断するために使用されるコンパクトなデータ構造です。ここでは、ドキュメント内の単語の存在を確認します。ノードの観点から、カミラタネットワークはさまざまなサイズの仮想ノードグループに分割されます。これにより、コーパスはいくつかのドキュメントからコーパスのすべてのドキュメントに範囲の複数のセットに分割されます。それぞれに対応するブルームフィルターがあるため、ネットワーク内の単語を見つけて、指定された単語をクエリするノードを簡単に確認できます。