Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/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 - Fatal编程技术网

Neo4j cypher中的查询模板?如何避免重复我自己

Neo4j cypher中的查询模板?如何避免重复我自己,neo4j,cypher,Neo4j,Cypher,我的小组有许多查询,它们往往涉及一类关系类型。因此,我们倾向于编写大量重复的查询,如下所示: match (n:Provenance)-[r:`input to`|triggered|contributed|generated]->(m:Provenance) where (...etc...) return n, r, m 这个问题与不同关系类型的重复有关。实际上,我们在一组关系类型中寻找任何关系。有没有办法将一组关系类型枚举到一个集合(“foo关系”)中,然后将其用作变量,以避免在许

我的小组有许多查询,它们往往涉及一类关系类型。因此,我们倾向于编写大量重复的查询,如下所示:

match (n:Provenance)-[r:`input to`|triggered|contributed|generated]->(m:Provenance)
where (...etc...)
return n, r, m
这个问题与不同关系类型的重复有关。实际上,我们在一组关系类型中寻找任何关系。有没有办法将一组关系类型枚举到一个集合(“foo关系”)中,然后将其用作变量,以避免在许多查询中反复重复?当我们可能添加新的关系类型时,这种对关系类型的重复查询往往会产生问题;现在,通过代码库分发的许多查询都需要更新


在单个查询中枚举所有可能的关系并不是什么大问题,但当分布在数十个(或数百个)查询中时,它开始变得难以管理和更新。这里推荐的解决方案模式是什么?查询模板化?

这目前不可能作为内置功能,但它似乎是一个有趣的功能。我鼓励您将此信息发布到创意trello董事会:

可能建议类似于允许关系类型的参数:

MATCH (n)-[r:{types}]->(p)
当然,这使得查询引擎更难提前优化查询。。关系类型的层次结构可以工作,但除非绝对必要,否则我们对于向模型引入新的抽象非常犹豫。尽管如此,我们还是非常欢迎您提出改进建议


现在,是的,像你建议的模板可以解决这个问题。理想情况下,您应该将查询发送到neo,其中包含您感兴趣的所有关系类型,并将其他项参数化,以实现最佳规划。要做到这一点,您需要在发送查询之前进行一些字符串替换,将长的reltype列表注入查询中

这可能是一个糟糕的想法,但有一种方法可以绕过它,那就是引入非常有限的宏。如果我可以定义“FooRelationship”=>foo | bar | baz | qux,那么您可以在求值之前在查询中展开宏(查询优化没有问题)。宏不会在模型中引入任何新的抽象。