【发布时间】:2014-02-13 17:34:01
【问题描述】:
我不能完全判断这是否是一个坏问题,但我认为它有一个明确的答案......
我正在构建我的第一个图形数据库。它将包含对内容的引用的节点。这些节点将连接到术语节点。每个术语节点可以是大约七种类型之一(Person、Organization、Jargon 等)。
在数据库中实现与查询速度相关的术语类型的最佳方法是什么?用户将根据术语搜索内容,其想法是允许他们根据类型过滤术语。
一个属性似乎是不可能的,因为它需要在查询期间为每个术语访问一个 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: ...})
任何有更多经验/知识的人都可以参与进来吗?非常感谢。
【问题讨论】:
标签: performance graph neo4j cypher