首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可选匹配与关系位置匹配的Neo4j效率

可选匹配与关系位置匹配的Neo4j效率
EN

Stack Overflow用户
提问于 2016-11-15 21:58:08
回答 1查看 761关注 0票数 1

我对Neo4j还有点陌生,所以也许我在某个地方漏掉了一些明显的写作,但是我在搜索中并没有看到任何关于这种情况的东西,所以下面是-

我遇到了这样的情况:我正在制作一个Neo4j查询生成器,它用一个JSON字符串构造Neo4j查询,并试图找出一个匹配关系的效率问题。我需要能够处理关系存在/不存在或应用筛选器的情况(例如,查找所有拥有公司或将“活动”属性设置为“false”的联系人),并且我正在设法找到处理此问题的最有效方法。

在WHERE子句中,我似乎没有做任何涉及“非模式”的操作--例如,尝试

代码语言:javascript
复制
MATCH (cn:contact), (cmp:company) 
WHERE NOT (cn)-[]-(cmp)
RETURN cn, cmp

把所有的人脉和公司都扔给我。正因为如此,我似乎绝对需要通过一个可选的匹配来完成这个任务,这是一个我可以在没有太多问题的情况下实现的。

但是,我可以这样做

代码语言:javascript
复制
MATCH (cn:contact), (cmp:company)
WHERE (cn)-[]-(cmp)
RETURN cn, cmp

并且只获取相关的联系人和公司,这意味着我不必在这种情况下使用可选的匹配。这将简化我的查询解析,以便在关系存在或关系不存在时使用可选匹配,但我已经看到,多个可选匹配子句可能会导致效率问题。有没有人知道WHERE (cn)-[]-(cmp)OPTIONAL MATCH (cn)-[r]-(cmp) WITH cn,cmp,r WHERE r IS NOT NULL之间是否存在效率差异?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-15 23:21:34

已更新

第1部分

看起来,您最初的查询(复制如下)是为了获取所有与任何公司没有关系的联系人:

代码语言:javascript
复制
MATCH (cn:contact), (cmp:company)
WHERE NOT (cn)-[]-(cmp)
RETURN cn, cmp;

如果是这样的话,上面的查询不像您预期的那样工作,因为它实际上是返回所有在它们之间没有关系的联系人和公司对。这与将所有没有关系的联系人退还给任何公司是不一样的。要做后一项工作,这样做是可行的:

代码语言:javascript
复制
MATCH (cn:contact)
WHERE NOT (cn)--(:company)
RETURN cn;

第2部分

在对这个答案的评论中,您询问是否可以在WHERE子句中执行诸如“查找与名称以字母‘A’开头的公司没有关系的所有联系人”之类的查询(而不必使用OPTIONAL MATCH)。答案是肯定的,至少在您使用模式理解特性添加到neo4j 3.1 (当前的在贝塔)中时是这样的。

首先,下面是如何使用OPTIONAL MATCH返回此类联系人的集合

代码语言:javascript
复制
MATCH (cn:contact)
OPTIONAL MATCH (cn)--(cmp:company)
WHERE cmp.name STARTS WITH 'A'
RETURN [x IN COLLECT({cmp:cmp, cn:cn}) WHERE x.cmp IS NULL | x.cn] AS cns;

下面是如何使用新的pattern comprehension工具Cypher在3.1中完成相同的事情而不使用OPTIONAL MATCH (下面的查询以行形式返回结果,而不是单个集合):

代码语言:javascript
复制
MATCH (cn:contact)
WHERE SIZE([(cn)--(cmp:company) WHERE cmp.name STARTS WITH 'A' | 0]) = 0
RETURN cn;

请注意,pattern comprehension允许您在指定的模式中定义新的本地标识符cmp,并在本地使用它。这种模式理解创建了一个由零组成的集合(可能是任何值,因为我们实际上并不使用它) --每个名称以'A‘开头的相关公司都有一个。如果集合大小为0,则WHERE子句的计算结果为true

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

https://stackoverflow.com/questions/40620466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档