2016-07-07 8 views
0

現在、類似性推薦者を構築するための解決策として、OrientDB(2.1.16)を評価中です。そのために、私は以下を達成し、最初のクエリの書き込みいくつかの助けが大好きです:OrientDBで最も一般的な共有頂点を見つける

Vertex:Maker -(Edge:Produced)-> Vertex:Item -(Edge:TaggedBy)-> Vertex:Tag 
  1. を私は特定の項目(V1)を選択して、バックで注文した他の項目(Vn)のリストを取得したいのですが共通のタグ数はV1です。
  2. 私は、選択したメーカー(V2)を持ち、アイテムをトラバースして、タグを共有するメーカー(および可能であればトラバースされたアイテム)の順序付きリストを取得したいと考えています。

このようにして交差のアプリケーションに関する詳細な文書はありません。特に珍しい制約はありません。何千ものアイテムとメーカーがあり、おそらくその10倍のタグがあります。

+0

こんにちは、それはJSの機能に便利かもしれませんか? –

+0

サーバーサイドスクリプトとして?それはうまくいくように見えます。私は直接クエリを期待していましたが、これをオプションとして検討します。提案していただきありがとうございます。 – CrustyRatFink

+1

は2.1.16を使用するための制約ですか?最新のstable(2.2.3)には、この種のタスクをはるかに簡単にする新しいMATCHステートメントが含まれています。 –

答えて

0

私はこの小さなグラフの例

enter image description here

てみました私はこのクエリ

select item.name, count(tag)from (
    select from (
     MATCH { 
      CLASS:Item, AS:item, WHERE: (name<>'v1') 
     } 
     .out("TaggedBy"){AS:tag} 
     return item, tag 
    ) where tag in (
     select expand(tag) from (
      MATCH { 
       CLASS:Item, AS:item, WHERE: (name='v1') 
      }.out("TaggedBy"){AS:tag} 
      return tag 
     ) 
    ) 
) group by item order by count desc 

を使用し、私は

enter code here

はそれが役に立てば幸い、この結果を得ました。

+0

解決に感謝します。私は、関係をトラバースしていないので、ユースケースが標準のリレーショナルデータベースに適しているという結論に達した後、このアプローチを削除しました。 – CrustyRatFink

関連する問題