在 OrientDB 中查找最常见的共享顶点
Find most common shared vertices in OrientDB
我目前正在评估 OrientDB (2.1.16) 作为构建相似性推荐器的可能解决方案。为此,我希望得到一些帮助来编写完成以下内容的初始查询:
Vertex:Maker -(Edge:Produced)-> Vertex:Item -(Edge:TaggedBy)-> Vertex:Tag
- 我想 select 一个特定的项目
(V1)
并得到其他项目的列表 (Vn)
按与 [=13= 共享的标签数量排序];
- 推而广之,我想采用 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
我得到了这个结果
希望对您有所帮助。
我目前正在评估 OrientDB (2.1.16) 作为构建相似性推荐器的可能解决方案。为此,我希望得到一些帮助来编写完成以下内容的初始查询:
Vertex:Maker -(Edge:Produced)-> Vertex:Item -(Edge:TaggedBy)-> Vertex:Tag
- 我想 select 一个特定的项目
(V1)
并得到其他项目的列表(Vn)
按与 [=13= 共享的标签数量排序]; - 推而广之,我想采用 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
我得到了这个结果
希望对您有所帮助。