有没有一种默认的方式如何仅匹配前n个关系(除了LIMIT n稍后过滤)?
我有这个查询:
START n=node({id})
MATCH n--u--n2
RETURN u, count(*) as cnt order by cnt desc limit 10;
Run Code Online (Sandbox Code Playgroud)
但假设n--u关系数量非常多,我想放宽此查询并以例如前100个随机关系为例,然后继续u--n2...
这是用于协作过滤任务的,并且假设用户之间的相似程度较低,我不想匹配所有用户,u但希望匹配随机子集。这种方法的性能应该更快-现在我的查询时间约为500毫秒,但希望将其降低到50毫秒以下。
我知道我可以将上面的查询分为2个单独的查询,但是仍然在第一个查询中它遍历所有用户,并且以后它会限制输出。我想限制match阶段的最大关联。
您可以使用管道传输查询的当前结果WITH,然后使用LIMIT这些初始结果,然后在同一查询中继续:
START n=node({id})
MATCH n--u
WITH u
LIMIT 10
MATCH u--n2
RETURN u, count(*) as cnt
ORDER BY cnt desc
LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
上面的查询会给出u找到的前 10 个,然后继续查找前 10 个匹配的n2。
或者,您可以省略第二个LIMIT,您将获得前十个的所有匹配(这意味着如果它们与前 10 个匹配,您可能会返回十多个行)。n2uu
| 归档时间: |
|
| 查看次数: |
5059 次 |
| 最近记录: |