在 OrientDB 中查找最常见的共享顶点

Find most common shared vertices in OrientDB

我目前正在评估 OrientDB (2.1.16) 作为构建相似性推荐器的可能解决方案。为此,我希望得到一些帮助来编写完成以下内容的初始查询:

Vertex:Maker -(Edge:Produced)-> Vertex:Item -(Edge:TaggedBy)-> Vertex:Tag
  1. 我想 select 一个特定的项目 (V1) 并得到其他项目的列表 (Vn) 按与 [=13= 共享的标签数量排序];
  2. 推而广之,我想采用 selected Maker (V2) 并遍历 Items 以获得共享标签的 Maker 的有序列表(以及遍历的 Items,如果可能的话) .

关于以这种方式应用 intersect 的详细文档并不多。没有特别的异常限制。会有数以千计的物品和制造商,标签的数量可能是原来的 10 倍。

我试过这个小图表示例

我使用了这个查询

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

我得到了这个结果

希望对您有所帮助。