neo4j 中的自引用节点

Self-referential nodes in neo4j

如果我们在neo4j中创建自引用节点可以吗?我需要在大数据环境中使用它,因此性能非常重要。 我找到了一个示例 here,但需要了解更多关于此的意见。一般哪个比较好?使用自引用节点或将它们分解为具有不同标签和关系的独立节点? 我的场景是创建电子商务标签组和标签。 A TAG_GROUP 有 TAGs ,这很清楚。然而,一些标签可能有子标签。所以可以有 2 个解决方案:

1) 要将 TAG-[has]-TAG 自引用标签与 {parentID,isSubTag,...} 等属性一起使用,这样做的好处是我可以使用多个子标签等级。但是我不确定性能如何。

2)使用TAH-[有]-SUB_TAG。好吧,也许这个更简单,更容易理解。但是如果 SUB_TAG 本身有一个 SUB_SUB 标签呢?

如有任何帮助,我们将不胜感激。

P.S.I 我将使用 neo4j 3.0.1 独立服务器和 Spring-Data-neo4j 4.1.1

在 SDN 的用例之外,您所描述的是一个层次结构,它绝对可以在 Neo4J 中自然地建模。

parent/child的概念只需要用关系来完成,不需要属性。

(Tag)-[:CHILD]->(Tag)-[:CHILD]->(Tag)

我假设您会有带有关联标签的产品,然后标签可以 tags 产品:

(Tag)-[:TAGS]->(Product)

查找产品的关联标签非常简单:

MATCH (product:Product {id: 1})
OPTIONAL MATCH (product)<-[:TAGS]-(tag)
RETURN product, collect(tags) as tag

可选匹配在不中断查询的情况下考虑了没有标签的产品

如果您想要每个标记产品的标记的完整标记层次结构

MATCH (product:Product {id: 1})
OPTIONAL MATCH (product)<-[:TAGS]-()<-[:CHILD*0..]-(tag)
RETURN product, collect(tag) as tags

这里的 0 考虑到标签没有父标签的情况,并将 () 嵌入到 tags 集合中。

我建议您阅读以下有关建模和 Cypher 部分的内容,我相信有人可以为此添加 SDN 方面的答案。

http://graphaware.com/neo4j/2013/10/11/neo4j-bidirectional-relationships.html

http://graphaware.com/graphaware/2015/05/19/neo4j-cypher-variable-length-relationships-by-example.html