首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >找到所有不是一个人购买的物品,并计算购买的次数

找到所有不是一个人购买的物品,并计算购买的次数
EN

Stack Overflow用户
提问于 2019-01-20 15:38:44
回答 1查看 44关注 0票数 0

我有一个图表,看起来像这样。

我想找到人们购买的所有物品,他们使用cypher购买了与Gremlin相同的物品。

基本上,我想要模仿gremlin示例中的查询,如下所示

代码语言:javascript
运行
AI代码解释
复制
g.V().has("name","gremlin")
    .out("bought").aggregate("stash")
    .in("bought").out("bought")
        .where(not(within("stash")))
    .groupCount()
        .order(local).by(values,desc) 

我试着这样做

代码语言:javascript
运行
AI代码解释
复制
MATCH (n)-[:BOUGHT]->(g_item)<-[:BOUGHT]-(r),
      (r)-[:BOUGHT]->(n_item)
WHERE 
    n.name = 'Gremlin' 
    AND NOT (n)-[:BOUGHT]->(n_item)
RETURN n_item.id, count(*) as frequency
ORDER by frequency DESC

但它似乎没有正确计算frequencies -它们似乎是两倍大。

代码语言:javascript
运行
AI代码解释
复制
4 - 4
5 - 2
3 - 2

35只被买了一次,4被买了两次。有什么问题吗?

EN

回答 1

Stack Overflow用户

发布于 2019-01-21 10:04:42

Cypher对路径感兴趣,您的匹配会找到以下内容:

  • 2通过Rexter (通过物料2和1)到物料3的路径
  • 2通过管道(通过物料1和2)到物料5的路径
  • 4通过Rexter和管道(通过每个人的物料1和2)到物料4的路径

基本上,这些项目会被计算多次,因为通过Gremlin的不同常见项目,每个人都有多条通往同一项目的路径。

为了获得准确的计数,你要么需要匹配不同的r用户,然后只匹配r用户购买的商品(只要他们不在Gremlin购买的商品集合中),要么你需要进行整个匹配,但在进行计数之前,获取每个人的不同商品,这样每个人的商品只发生once...then获得每件商品的数量(所有人的数量)。

下面是一个使用第二种方法的查询

代码语言:javascript
运行
AI代码解释
复制
MATCH (n:Person)-[:BOUGHT]->(g_item) 
WHERE n.name = 'Gremlin' 
WITH n, collect(g_item) as excluded
UNWIND excluded as g_item // now you have excluded list to use later
MATCH (g_item)<-[:BOUGHT]-(r)-[:BOUGHT]->(n_item)
WHERE r <> n AND NOT n_item in excluded
WITH DISTINCT r, n_item
WITH n_item, count(*) as frequency
RETURN n_item.id, frequency
ORDER by frequency DESC

您应该在图形中使用标签,并且应该在查询中使用它们,以便利用索引并在图形中快速找到起点。在您的例子中,在:Person(name)上建立索引,并在查询中使用:Person标签,即使向图中添加了更多的节点和更多的:Person,也应该会更快。

编辑

如果您只是在寻找查询的简洁性,并且没有足够大的图,而性能将是一个问题,那么您可以使用原始查询,但在计算项目之前添加一行以获得不同的rn_item行。这确保了当您获得计数时,每个人只计算一次物品。

请注意,放弃了处理排除项的优化(它将对每个项执行模式匹配,而不是聚合购买项的集合并执行集合成员关系检查),并且它在进行属性访问时聚合项,而不是仅在节点聚合之后才进行属性访问。

代码语言:javascript
运行
AI代码解释
复制
MATCH (n:Person)-[:BOUGHT*2]-(r)-[:BOUGHT]->(n_item)
WHERE n.name = 'Gremlin' 
WITH DISTINCT n, r, n_item
WHERE NOT (n)-[:BOUGHT]->(n_item)
RETURN n_item.id, count(*) as frequency
ORDER by frequency DESC

我在您的匹配中添加了一个快捷方式,使用: about *2来指示两个:已购买的到r的跳数,因为我们并不真正关心中间的项目。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54278050

复制
相关文章
python_文件的打开和关闭
文件对象 = open('文件名','使用方式') rt:读取一个txt文件 wt: 只写打开一个txt文件,(如果没有该文件则新建该文件)会覆盖原有内容 at:打开一个txt文件,并从文件指针位置追加写内容(文件指针默认在末尾) 文件操作错误属于:I/O异常 通常的异常:
Mirror王宇阳
2020/11/10
1.5K0
MySQL是如何打开和关闭表?
当我们在执行mysqladmin status 命令或连接通过mysql客户端连接到实例后,执行\s的时候,应该看到类似以下的内容:
SEian.G
2021/07/29
3.6K0
c语言文件介绍,打开和关闭操作
文件基本概念 文件指针 打开文件 fopen(“文件路径”,打开方式); 文件路径: 打开文件: 关闭文件 fclose(文件指针);
大忽悠爱学习
2021/03/02
1.3K0
c语言文件介绍,打开和关闭操作
vim打开多个文件、同时显示多个文件、在文件之间切换 打开多个文件:
1.vim还没有启动的时候: 在终端里输入 vim file1 file2 ... filen便可以打开所有想要打开的文件 2.vim已经启动 输入 :open file 可以再打开一个文件,并且此时vim里会显示出file文件的内容。
sunsky
2020/08/19
15.4K0
文件的打开与关闭
使用完一个文件后应该关闭它,以防止程序对文件误操作而导致出错。文件关闭是指撤销文件信息区和文件缓冲区,使文件指针变量不再指向该文件。
pigeon
2022/04/11
1.3K0
文件的打开与关闭
10.2 打开与关闭文件
例如:fopen(“a1”,“r”),表示要打开名字为“a1”的文件,使用文件方式为“读入”。
小林C语言
2019/07/12
7460
10.2 打开与关闭文件
正常的工作流程
修改文件,将它们更新的内容添加到索引中。 $ git add file1 file2 file3 你现在为commit做好了准备,你可以使用git diff命令再加上–cached参数,看看哪些文件将被提交(commit)。 (如果没有–cached参数,git diff会显示当前你所有已做的但没有加入到索引里的修改。)你也可以使用git status命令来获得当前项目的一个状况。
用户3004328
2018/09/06
7600
检测网页是否正常打开 原
import urllib.request   import time   opener = urllib.request.build_opener()   opener.addheaders = [('User-agent', 'Mozilla/49.0.2')]   #这个是你放网址的文件名,改过来就可以了   # file = open('test.txt')   # lines = file.readlines()   aa=['http://www.jd.com/','http
双面人
2019/04/10
1.5K0
Bootstrap 基于Bootstrap和JQuery实现动态打开和关闭tab页
$("#tab-a-" + options.menuID).click(); // 选中打开的tab
授客
2019/08/21
7.9K1
tomcat无法正常关闭问题分析及解决
这时我们就只能通过强制杀死进程的方式停止Tomcat了:kill -9 <tomcat_process_id>。 那么,为什么使用shutdown.sh无法正常停止Tomcat进程呢?
编程随笔
2019/09/11
2.3K0
tomcat无法正常关闭问题分析及解决
C语言 | 文件打开关闭
这道理放在C语言学习上也一并受用。在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是日积月累的学习。
小林C语言
2021/05/28
1.3K0
C语言 | 文件打开关闭
C语言 | 文件打开关闭
用“r”方式打开的文件只能用于向计算机输入而不能用作向该文件输出数据,而且该文件应该已经存在,并存有数据,这样程序才能从文件中读数据。
小林C语言
2021/05/13
1.6K0
C语言 | 文件打开关闭
Apache编译后无法正常工作
因为某个场景的需求,要在一个国产系统Rocky4.2(国产凝思4.2操作系统)上安装Apache,虽说此系统是基于Redhat 5.8开发的,但是发现yum安装源包管理,RPM命令倒是能用,但是底层依赖完全没有,这就尴尬了,so,只能源码编译安装了。
后场技术
2020/09/03
2.8K0
Kubernetes 终止信号:确保应用程序正常关闭
在容器编排领域,Kubernetes 已成为领先的平台,可实现容器化应用程序的高效管理、扩展和部署。当应用程序在容器内运行时,正确终止这些容器对于维持系统的整体健康和可靠性至关重要。在本文中,我们将深入研究 Kubernetes 终止信号的概念,并了解它们如何确保应用程序正常关闭,避免数据丢失或用户体验中断。
DevOps云学堂
2023/09/11
6330
Kubernetes 终止信号:确保应用程序正常关闭
10.2 C语言打开与关闭文件
例如:fopen(“a1”,“r”),表示要打开名字为“a1”的文件,使用文件方式为“读入”。
小林C语言
2020/12/08
1.4K0
10.2 C语言打开与关闭文件
完美解决Hadoop集群无法正常关闭的问题!
相信对于大部分的大数据初学者来说,一定遇见过hadoop集群无法正常关闭的情况。有时候当我们更改了hadoop内组件的配置文件后,必须要通过重启集群来使配置文件生效。 但往往一stop-all.sh,集群下方总会出现下面的提示:
大数据梦想家
2021/01/27
1.9K0
完美解决Hadoop集群无法正常关闭的问题!
VSC不能同时打开多个文件
通过ctrl+shift+p 获取查找框,查询 settings.json 新增或修改: { // 控制通过 Quick Open 打开的编辑器是否显示为预览编辑器。预览编辑器不会保持打开状态,在将其显式设置为保持打开(例如通过双击或编辑)前将会重复使用。当 "#workbench.editor.enablePreview#" 处于禁用状态时,将忽略此值。 "workbench.editor.enablePreviewFromQuickOpen": false, "workbench.editor.en
手撕代码八百里
2022/05/10
1.7K0
页面打开时div从右侧进入 原
页面未加载时,用transform:translateX(100%);把div定位到右边隐藏,当页面加载的时候,增加in class,
tianyawhl
2019/04/04
1.1K0
IntelliJ IDEA同时打开多个窗口
1、点击File->Settings 2、点击open new project in new window选项 3、点击Apply即可
别团等shy哥发育
2023/02/25
6.6K0
IntelliJ IDEA同时打开多个窗口
点击加载更多

相似问题

切换jQuery div以打开和关闭不能正常工作的

20

每页多个图库-几乎可以正常工作

10

Imageshack API几乎正常工作

12

JQuery -多个div独立打开/关闭

36

actionscript打开/关闭声音不能正常工作

17
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文