Star

关于数据查询的一些问题

刚开始试用nebula graph,对ngql不是很熟悉,想请教几个数据查询的问题

测试的场景:电影推荐
数据包括:
1. 用户以及用户属性
2. 电影以及电影属性
3. 用户对电影的评分

下面是我遇到的一些问题:

1. 使用 nebula importer 导入数据时, 评分的 csv 文件有部分行数据有问题。成功导入的边比实际 csv 文件行数少。
如何统计数据库中特定类型的边的数量?以及特定tag的节点的数量?
neo4j中的实现: match (n:movie) return count(n); match p=()-[r:rating]->() return count(p)

2. 如何实现查找看过电影a的用户?(评分的关系我是设置从用户到电影的有向边,go from 可以从用户查找电影, 反过来用什么方法)
以及查找两个用户共同看过的电影有哪些
neo4j实现:match (:movie {prop1: xxx})<-[]-(u:user) return u; match (:user {prop1:xxx})-[]->(m:movie)<-[]-(:user {prop1:xxxx}) return m

3. 忽略方向的路径查找怎么实现?
比如说这个电影推荐场景的例子,用户与电影之间只有用户到电影的单向关系,用户之间没有直接的边相连,想要查找与用户a看过同一部电影的用户有哪些
neo4j实现:match (n0:user {prop1:xxx})-[r0:rating]->(m:movie)<-[r1:rating]-(n1:user) where n0.uid<>n1.uid return m.mid, r0.rating, n1.uid, r1.rating

对应的查询语句怎么写?

mark

Q1: 如何统计数据库中特定类型的边的数量?以及特定tag的节点的数量?
这个nebula 1.0 是没有的, 正在做, 会随着 2.0 发布

Q2: 如何实现查找看过电影a的用户?
nebula 是支持反向查找的, 可以参考下 https://docs.nebula-graph.com.cn/manual-CN/2.query-language/4.statement-syntax/2.data-query-and-manipulation-statements/go-syntax/#_3

Q3: 忽略方向的路径查找怎么实现?
用 pipe 试试呢? go 第一步由用户得到电影, 第二步再反向由电影得到用户
https://docs.nebula-graph.com.cn/manual-CN/2.query-language/3.language-structure/pipe-syntax/

好的。非常感谢!

漏了一个问题, 共同看过的 可以看下 Intersect
https://docs.nebula-graph.com.cn/manual-CN/2.query-language/2.functions-and-operators/set-operations/#intersect

浙ICP备20010487号