1

次のデータを持つノードを含むグラフがあります (1 つのノードに多くの親があるため、これはグラフです)。

  • キーワード ID
  • キーワード ラベル
  • 過去の検索回数
  • キーワードプロモーションの深さ

関連性は 1 から始まる数値で評価されます。
子ノードの関連性は、親ノードから子ノードまでの距離からキーワードのプロモーションの深さを差し引いた値によって決定されます。
同じ深さの子ノードの表示順序は、以前の検索回数によって決まります。
そのようなデータ構造を検索できるアルゴリズムはありますか?
すべてのノードを横断し、生成された結果をキャッシュしてページごとに表示する必要がある場合、大量のユーザーに対して適切にスケーリングする必要がある場合、効率の問題はありますか? 問題がある場合、どうすれば解決できますか?
どのようなデータベースを使用する必要がありますか? NoSQL、リレーショナル データベース、またはグラフ データベースですか?
スキームはどのように見えるでしょうか?
これを使用して行うことができますかジャンゴ-ヘイスタック?

4

1 に答える 1

3

グラフ上でトップkクエリを計算しようとしているようです。この問題を解決するのに適したさまざまなアルゴリズムがあります。グラフの走査がBFS方式で行われる場合、問題の解決に役立つと私が信じる最も単純なアルゴリズムは、しきい値アルゴリズム(TA)です。他のいくつかのtop-kアルゴリズムはLawler-MurtyProcedureであり、他のTAバリエーションが存在します。

効率に関して-クエリ自体の計算の問題は、返される結果の数が指数関数的であるために指数関数的な時間になる可能性がありますが、TAを使用する場合、結果を出力する間隔は比較的短くする必要があります。キャッシングとスケールに関する限り、通常の考慮事項が適用されます。スケールが取得されたときに分散システムと適切なTAバージョン(しきい値結合アルゴリズムなど)を使用することをお勧めします。もちろん、使用するデータベースソリューションを選択するときは、スケーリングとキャッシュの問題も考慮する必要があります。

データベースに関しては、間違いなくファーストクラスの市民としてグラフをサポートするものを使用する必要があります(グラフデータベースと呼ばれる傾向があります)。グラフデータベースの背後にあるストレージエンジンが相対的であるかNoSQLであるかは問題ではないと思います。注意すべき点の1つは、選択したデータベースが必要な規模に拡張できることを確認する必要があることです(したがって、大規模な場合は、より分散したソリューションを検討する必要があります)。スキーマは、選択するデータベースによって異なります(スキーマのないデータベースではないと想定)。

最後になりましたが、ヘイスタック。haystackは、使用する検索エンジンが機能するすべてのもので機能するため、少なくとも1つの方法(検索用のApache Solrとデータベース用のNeo4jまたはGoldenOrbの組み合わせ)が必要です。 Haystackや、Solr以外でサポートされている検索エンジンについてはあまり詳しくありません)。

于 2011-06-17T08:53:58.323 に答える