Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4J Cypher查询以查找公共链接节点_Neo4j_Cypher_Graph Databases - Fatal编程技术网

Neo4J Cypher查询以查找公共链接节点

Neo4J Cypher查询以查找公共链接节点,neo4j,cypher,graph-databases,Neo4j,Cypher,Graph Databases,我正在noe4j3.2.0中制作一个命名实体图。我有文章和实体作为节点类型。它们之间的关系/边是包含;表示该实体在该文章中出现的次数(如所附图片所示)。因此,如果一篇文章有一个实体5次,那么该文章和特定实体之间将有5条边 大约有1800万篇文章和4万个独特的实体。整个数据大约为20GB(包括ID上的索引),并加载在一台具有32GB RAM的机器上 我正在使用此图表建议/推荐其他实体。但我的问题花了太多时间 用例1:查找文章中存在的所有实体,这些实体具有列表[“A”、“B”]中的一个实体,并且按照

我正在noe4j3.2.0中制作一个命名实体图。我有
文章
实体
作为节点类型。它们之间的关系/边是
包含
;表示该实体在该文章中出现的次数(如所附图片所示)。因此,如果一篇文章有一个实体5次,那么该文章和特定实体之间将有5条边

大约有1800万篇文章和4万个独特的实体。整个数据大约为20GB(包括ID上的索引),并加载在一台具有32GB RAM的机器上

我正在使用此图表建议/推荐其他实体。但我的问题花了太多时间

用例1:查找文章中存在的所有实体,这些实体具有列表[“A”、“B”]中的一个实体,并且按照文章计数的顺序还具有一个实体“X”、一个实体“Y”和一个实体“Z”

这是我正在运行的密码查询

MATCH(e:Entity)-[:CONTAINS]-(a:Article)
WHERE e.EID in ["A","B"]
WITH a
MATCH (:Entity {EID:"X"})-[:CONTAINS]-(a)
WITH a
MATCH (:Entity {EID:"Y"})-[:CONTAINS]-(a)
WITH a
MATCH (:Entity {EID:"Z"})-[:CONTAINS]-(a)
WITH a
MATCH (a)-[:CONTAINS]-(e2:Entity)
RETURN e2.EID as EID, e2.Text as Text, e2.Type as Type ,count(distinct(a)) as articleCount
ORDER BY articleCount desc
查询配置文件如下:

这个查询为我提供了文章的所有第一级实体邻居,这些邻居具有X、Y、Z和至少一个A、B实体(我必须在查询中更改ID以提高内容敏感性)

我只是想知道是否有更好/更快的方法


另一个观察结果是,如果我继续添加过滤器(更多的匹配子句,如X、Y、Z),性能会恶化;尽管结果集越来越小

您对
:实体(EID)
有一个唯一性约束,因此至少优化已经到位

下面的Cypher查询更简单,并生成更简单的执行计划。希望它也能减少DB命中数

MATCH (e:Entity)-[:CONTAINS]-(a)
WHERE e.EID in ['A','B'] AND ALL(x IN ['X','Y','Z'] WHERE (:Entity {EID: x})-[:CONTAINS]-(a))
WITH a
MATCH (a)-[:CONTAINS]-(e2:Entity)
RETURN e2.EID as EID, e2.Text as Text, e2.Type as Type, COUNT(DISTINCT a) as articleCount
ORDER BY articleCount DESC;

您确实想要
a
的所有一级实体邻居吗?即使是那些具有
EID
值而不是“a”、“B”、“X”、“Y”和“Z”的实体邻居也是如此?@cybersam是的,EID是唯一的。所以A,B,X,Y,Z是搜索条件。我们需要在这些文章中找到所有其他实体。谢谢,我将尝试并提供反馈。