Indexing 为Cypher中的所有节点创建属性索引

Indexing 为Cypher中的所有节点创建属性索引,indexing,neo4j,cypher,cypher-3.1,Indexing,Neo4j,Cypher,Cypher 3.1,我的数据库有一条规则。任何东西都必须有一个“id”。因为这是我的主键字段,所以我想为它编制索引,但创建索引的唯一方法似乎是指定一个标签 所以使用这个数据集 CREATE (:TEST1{id:"<uuid>"}), (:RAWR{id:"<uuid>"}), (:FOO:BAR{id:"<uuid>"}), ({id:"<uuid>"}) CREATE(:TEST1{id:“}), (:RAWR{id::}), (:FOO:BAR{id::}),

我的数据库有一条规则。任何东西都必须有一个“id”。因为这是我的主键字段,所以我想为它编制索引,但创建索引的唯一方法似乎是指定一个标签

所以使用这个数据集

CREATE (:TEST1{id:"<uuid>"}),
(:RAWR{id:"<uuid>"}),
(:FOO:BAR{id:"<uuid>"}),
({id:"<uuid>"})
CREATE(:TEST1{id:“}),
(:RAWR{id::}),
(:FOO:BAR{id::}),
({id::})
我想使用索引通过UUID查找未标记的节点


这在塞弗有可能吗?或者,我唯一的选择是在进入数据库的所有内容上注入“节点”标签吗?(创建一个标签然后将其分配给所有内容感觉是错误的。劫持所有创建请求以添加该附加标签感觉像是自找麻烦。)

一个节点可以有多个标签。因此,除了现有标签之外,您还可以为所有节点分配一个公共标签,然后使用该公共标签和
id
创建索引


但是,由于您希望
id
值是全局唯一的,因此不应创建索引,而应创建一个(这会自动为您创建一个索引作为副作用)。这将告诉neo4j为您强制执行
id
唯一性。

一个节点可以有多个标签。因此,除了现有标签之外,您还可以为所有节点分配一个公共标签,然后使用该公共标签和
id
创建索引


但是,由于您希望
id
值是全局唯一的,因此不应创建索引,而应创建一个(这会自动为您创建一个索引作为副作用)。这将告诉neo4j为您强制执行
id
唯一性。

是的,您需要一个标签来创建索引。重新考虑在所有东西上设置id。uuid是一个技术id,删除一个节点后,可以将其重新用于另一个节点。不要用它。我在apoc中看到了一个id生成器。您可能需要定期运行批处理查询,以使用apoc中的值创建id字段(确定吗?),该值用于处理序列。@JeromeB我并不真正关心分配id,也不需要它们是唯一的。只要知道有一个id字段,并且我有该字段的值,但没有节点的标签,我希望能够通过该id快速找到节点,而不是扫描所有节点,即使该节点尚未分配标签。如果标签列表有限且已知。。。一个选项是(通过约束)为每个标签创建索引,然后执行联合查询。这意味着您可以有两个具有相同id的不同标签的节点。@JeromeB但是如果我要查找的节点没有标签怎么办?是的,您需要一个标签来创建索引。重新考虑在所有东西上设置id。uuid是一个技术id,删除一个节点后,可以将其重新用于另一个节点。不要用它。我在apoc中看到了一个id生成器。您可能需要定期运行批处理查询,以使用apoc中的值创建id字段(确定吗?),该值用于处理序列。@JeromeB我并不真正关心分配id,也不需要它们是唯一的。只要知道有一个id字段,并且我有该字段的值,但没有节点的标签,我希望能够通过该id快速找到节点,而不是扫描所有节点,即使该节点尚未分配标签。如果标签列表有限且已知。。。一个选项是(通过约束)为每个标签创建索引,然后执行联合查询。意味着您可以有两个具有相同id的不同标签的节点。@JeromeB但是如果我要查找的节点没有标签怎么办?