繁体   English   中英

标签,属性或节点? Cypher支架/ Neo4j的

[英]Labels, properties, or nodes? Cypher/Neo4j

我不太清楚这是一个不好的问题,但我认为它有一个明确的答案...

我正在构建我的第一个图形数据库。 它将包含引用内容的节点。 这些节点将连接到术语节点。 每个术语节点可以是大约七种类型(人员,组织,专业术语等)之一。

在数据库中实现与查询速度相关的术语类型的最佳方法是什么? 用户将根据术语搜索内容,其想法是允许他们根据其类型来过滤术语。

由于属性似乎是不可能的,因为它要求在查询期间为每个术语访问JSON对象。

(contentNode:content)-[:TAGGED_WITH]-(termNode:term {type: {"people":false,"organizations":false,"physicalObjects":true,"concepts":true,...}}

标签对我来说很直观,因为不同的类型实际上只是在更具体地标记节点。 每个术语节点可以具有标签“术语”以及相关类型。 我对此有些困惑,但是似乎标签不能在密码查询中用作动态属性,因为它阻止查询被缓存/正确索引。

(contentNode:content)-[:TAGGED_WITH]-(termNode:term:physicalObject:jargon:...)

我能想到的最后一个选择是为每个术语“类型”都有一个节点,并将该术语连接到相关的类型节点。 目前,这似乎是最好的选择(尽管最冗长)。

(contentNode:content)-[:TAGGED_WITH]-(termNode:term)-[:IS_TYPE]-(typeNode:termType {name:jargon}), (termNode:term)-[:IS_TYPE]-(typeNode:termType {name:physical object}), (termNode:term)-[:IS_TYPE]-(typeNode:termType {name: ...})

任何有更多经验/知识的人都可以参与其中吗? 非常感谢。

我不确定我是否完全理解您要做什么,但我想回答几点,然后也许您可以阐述一下:

但似乎标签不能在密码查询中用作动态属性,因为它会阻止查询被缓存/正确索引。

使用动态标签不会对索引产生影响,但是您只写了部分有关缓存的文章。 密码解析器保留了以前见过的查询缓存,因此不必每次都重新生成查询计划。 由于标签数量有限,因此只要您缓存了所有组合,就不会花很长时间。

我建议尝试使用您的数据子集尝试各种模型,并分别测量每个模型的查询时间和查询可读性。

标记

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM