Neo4j 如何使下面的密码查询具有设置自动完成控件的结果?

Neo4j 如何使下面的密码查询具有设置自动完成控件的结果?,neo4j,cypher,Neo4j,Cypher,我正在执行以下密码查询: 匹配(a)其中a.itemId在['Q2','Q24','Q30','Q23','Q16','Q20']中返回a 我希望它返回与设置自动完成开关时相同的结果。这个问题问了又答,但我不明白答案。这可以在一个查询中执行吗?如果可以,修改后的查询是什么?是的,您应该可以在一个查询中完成所有操作。要获取相关节点及其关系,可以执行以下操作: MATCH (a) WHERE a.itemId IN ['Q2', 'Q24', 'Q30', 'Q23', 'Q16', 'Q20']

我正在执行以下密码查询: 匹配(a)其中a.itemId在['Q2','Q24','Q30','Q23','Q16','Q20']中返回a


我希望它返回与设置自动完成开关时相同的结果。这个问题问了又答,但我不明白答案。这可以在一个查询中执行吗?如果可以,修改后的查询是什么?

是的,您应该可以在一个查询中完成所有操作。要获取相关节点及其关系,可以执行以下操作:

MATCH (a)
WHERE a.itemId IN ['Q2', 'Q24', 'Q30', 'Q23', 'Q16', 'Q20']
OPTIONAL MATCH (a)-[rel]-()
RETURN a, collect(rel)
这将为每个节点返回一个关系数组

根据您用于Neo4j的库的不同,它可能会或不会返回一些有用的信息来提供startnode/endnode。你也可以这样做:

MATCH (a)
WHERE a.itemId IN ['Q2', 'Q24', 'Q30', 'Q23', 'Q16', 'Q20']
OPTIONAL MATCH (a)-[rel]-()
RETURN a, collect({rel: rel, start_node: startNode(rel), end_node: endNode(rel)})

这将为每个节点提供一个数组,其中包含数据的对象/映射。

对如何仅返回匹配节点之间的关系的问题进行了单独的澄清。这应该是可能的,就像这样:

MATCH (a)
WHERE a.itemId IN {itemIds}
OPTIONAL MATCH (a)-[rel]-(b)
WHERE b.itemId IN {itemIds}
RETURN a, collect(rel)

同样,您可能还想返回关系的
startNode
/
endNode

谢谢您的回复,Brian。这些查询中的每一个都返回了5000多个节点。启用“自动完成”时,我的原始查询仅返回指定的6个节点和8个关系,这是我希望在密码查询中复制的。哦,我的错!我刚刚编辑切换了
可选匹配
WHERE
WHERE
正在过滤
a
,因此应该直接在
匹配
子句之后)。试试看,谢谢你,布莱恩。这些查询返回300多个节点,但需要6个节点(与自动完成相同)。。。你是说它返回300行吗?如果是,在
a
列中返回的节点是否在不同的行上重复?Neo4j浏览器图形视图显示393个节点。切换到行视图,我正确地看到了6个节点。谢谢你的帮助!此外,您可能还应该按标签进行查询,并在
标签(itemId)
上建立索引。否则你的表现可能会受到影响编辑工作非常完美,布莱恩!谢谢你的专业知识和耐心。