2016-07-07 67 views
0

我目前正在評估OrientDB(2.1.16)作爲構建相似推薦器的可能解決方案。爲此,我喜歡一些幫助編寫完成以下初始查詢:在OrientDB中查找最常用的共享頂點

Vertex:Maker -(Edge:Produced)-> Vertex:Item -(Edge:TaggedBy)-> Vertex:Tag 
  1. 我想選擇一個特定的項目(V1)並得到一個列表所訂購的其他項目(Vn)的與V1共享的標籤數量;
  2. 通過擴展,我想採用選定的製造商(V2)並遍歷Items以獲取共享標籤的Makers(以及遍歷的Items,如果可能的話)的有序列表。

關於以這種方式應用相交的詳細文檔沒有太多詳細的文檔。沒有特別的限制。會有成千上萬的物品和製造商,可能是許多標籤的10倍。

+0

嗨,它可能是有用的JS功能? –

+0

作爲服務器端腳本?這看起來可能會起作用。我希望能夠直接查詢,但我會將其作爲一個選項加以考慮。感謝您的建議。 – CrustyRatFink

+1

是使用2.1.16的一個約束嗎?最新的穩定版(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