gpt4 book ai didi

neo4j - Neo4j 中的标签是否自动编入索引?

转载 作者:行者123 更新时间:2023-12-01 08:18:51 24 4
gpt4 key购买 nike

图数据库的全新内容——欢迎指正。

如果我想获得标有“用户”标签的节点列表,neo4j(或其他可能的图形数据库)是否需要搜索该标签的所有节点,或者它是否以某种方式按标签自动 inode ?

如果没有索引,(糟糕的性能)每个节点都会被查询以查看其标签是否与“用户”匹配,如下所示:

List<Node> userNodes = new List<Node>();
for (Node node : all_nodes)
{
for (Label label : node.labels())
{
if (label.name() == "User")
{
userNodes.Add(node);

// no need to look at other labels for this node
break;
}
}
}
return userNodes;

通过索引,系统会抓取一些系统管理的“节点”,该节点下有所有标签名称(搜索空间是数十个而不是数百万个)并抓取其子节点:

  List<Node> userNodes = new List<Node>();
for (Node labelNode : labels_node) // where labels_node is system-managed
{
if (labelNode.name() == "User")
{
// All children of the "User" node have the label "User"
userNodes = labelNode.children();

// No need to look at other labels
break;
}
}
return userNodes;

最终,我认为这个问题是这样的:如果我正在构建一个“事物”列表,我需要为其检索所有事物按事物类型,我是否应该使用标签来完成这?或者我应该创建自己的“用户”节点,它指向所有用户节点,并且只在找到我想要的节点子集后才使用标签?

好像this question类似虽然比较模糊但是没有得到满意的答复。

最佳答案

就术语而言,文档讨论的是“标签和模式索引”。 “索引”是您附加在标签属性上的东西,例如索引所有 :Person 节点的 first_name 属性。

但是对于你的问题,标签表现得像索引因为是的,执行引擎利用它们并像你期望的索引一样使用它们,即使文档没有谈论标签作为索引。

因此,举一个具体的例子,假设我们有一个包含 100 万个节点的图,其中 5 个节点的标签为 :Person。假设我们有以下查询:

MATCH (p:Person) RETURN p;

问题归结为,cypher要考虑多少个节点?答案是 5,而不是 100 万。

您的第二个代码片段更像是 neo4j 1.9 版的一种方法;现在我不会创建这些人工“ inode ”,也不会遍历所有可能的标签,我只会按标签进行匹配并完成它。

关于neo4j - Neo4j 中的标签是否自动编入索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28156632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com