在OrientDB

时间:2016-07-07 18:34:19

标签: orientdb graph-databases recommendation-engine

我目前正在评估OrientDB(2.1.16)作为构建相似性推荐器的可能解决方案。为此,我非常乐意帮助编写一个初始查询来完成以下任务:

Vertex:Maker -(Edge:Produced)-> Vertex:Item -(Edge:TaggedBy)-> Vertex:Tag
  1. 我想选择一个特定的项目(V1)并获取其他项目(Vn)的列表,这些项目按照与V1共享的标记数量排序;
  2. 通过扩展,我想选择一个选定的制作工具(V2)并遍历项目以获得共享标签的制造商(以及可能的遍历项目)的有序列表。
  3. 以这种方式没有关于交叉应用的大量详细文档。没有特别的限制。将有数千个项目和制造商,可能是许多标签的10倍。

1 个答案:

答案 0 :(得分: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

希望它有所帮助。