0

我有一个分类作为 Neo4j 图。基本结构是这样的:

taxonomyName -HAS_ROOT_TERM-> root -IS_BROADER_THAN-> term -IS_BROADER_THAN-> term'-IS_BROADER_THAN-> term'' - ...

现在我想要一个给定的术语 - 例如术语'' - 它从分类根的路径(或多个路径;请注意,可能有多个具有多个合格根的分类,该结构实际​​上是一个多层次结构):

START n=node:index("id:term''Id")
MATCH p = taxonomy-[:HAS_ROOT_TERM]->r-[:IS_BROADER_THAN*]->n
RETURN TAIL(EXTRACT(n in NODES(p) : n.id))

排除了第TAIL一个节点,我没有取回分类节点本身。这很好用,除非我直接查询根词。然后什么都没有返回。当然:我搜索至少包含三个元素的路径,分类节点、根节点和根的任何后代。现在我需要表达这一点r并且n可能是平等的。我试图使IS_BROADER_THAN关系成为可选的,但是由于找不到模式,所以只返回了 null 。

那么如何将我的查询限制在包含根项的路径并允许长度为 1 且仅包含根项的路径?

谢谢!

4

1 回答 1

1

恐怕是典型的“RTFM”案例;-)

http://docs.neo4j.org/chunked/stable/query-match.html#match-zero-length-paths上的文档告诉我们,

... root -[:IS_BROADER_THAN*0..]-> term ...

成功了。仅指定星号假定1..范围。与0..,开始和结束节点可能相同,即关系可能根本没有被遍历。

于 2013-08-01T07:24:17.017 回答