在Neo4j中使用索引

本文关键字:索引 Neo4j | 更新日期: 2023-09-27 17:53:30

我一直在浏览Neo4J和Neo4J c#客户端。

neo4jclient wiki帮助我与节点crud操作。然而,维基在这里戛然而止。我研究了源代码中的测试方法,设法理解了它们之间的关系,并在网上搜索,以了解索引是如何工作的。

到目前为止,我得到的大致如下:
//create indexing on user and car
client.CreateIndex("User", new IndexConfiguration() { Provider = IndexProvider.lucene, Type = IndexType.fulltext }, IndexFor.Node); 
client.CreateIndex("Car", new IndexConfiguration() { Provider = IndexProvider.lucene, Type = IndexType.fulltext }, IndexFor.Node);
//create user
client.Create(new User() { Name = "Dovakiin", Job = "Dragon Slayer" });
client.Create(new User() { Name = "Ulfric stormcloak", Job = "Imperial Slayer" });
//create Car
client.Create(new Car() { Name = "Paarthurnax", Modal = 212 });
//User owns car relationship
client.CreateRelationship(userRef, new Owns_CarRelationship(CarRef));

这就是我现在卡住的地方…当我尝试按名称查找用户时,我的密码查询返回零结果:

 start u=node:User(Name="Dovakiin") return u;

,我不太明白为什么它返回零节点,而显然

start n=node(*) return n;

显示所有节点。

我错过了别的东西,而索引?或者这与索引无关?我不需要将每个节点都添加到索引中吗?

我所要做的就是选择具有给定属性的节点:在这种情况下是Name = "Dovakiin" ..请问我如何选择这个?

在Neo4j中使用索引

就ulkas的回答展开一下,如果您想启用自动索引,并且发现文档有点令人困惑(就像我第一次阅读它时那样),那么您可以这样设置。

假设你想自动索引一些节点属性;说"名字"answers"工作"。打开/conf/neo4j. conf文件。属性文件,你应该看到类似这样的内容:

# Autoindexing
# Enable auto-indexing for nodes, default is false
#node_auto_indexing=true
# The node property keys to be auto-indexed, if enabled
#node_keys_indexable=name,age

然后你必须编辑文件如下:

# Autoindexing
# Enable auto-indexing for nodes, default is false
node_auto_indexing=true
# The node property keys to be auto-indexed, if enabled
node_keys_indexable=name,job

完成后,为了使自动索引生效,您必须重新启动neo4j。另外,作为旁注,任何当前存在的节点都不会被自动索引,这意味着您必须重新创建它们。如果你不想从头开始,这里有一些关于如何更新它们的文档:http://docs.neo4j.org/chunked/milestone/auto-indexing.html#auto-indexing-update-removal(我从未尝试过)。

然后你可以开始寻找这样的节点:

start n=node:node_auto_index(name="Dovakiin"), or
start n=node:node_auto_index(job="Dragon Slayer")

或者,像c#客户端那样:

Node<User> myNode = client.QueryIndex<User>("node_auto_index", IndexFor.Node, "name:Dovakiin").First();, or
Node<User> myNode = client.QueryIndex<User>("node_auto_index", IndexFor.Node, "job:Dragon Slayer").First();

你也可以对关系做同样的事情,只要你在/conf/neo4j中设置它。属性文件。与处理节点的方法完全相同。

您必须手动将节点添加到索引中,如

client.indexRef1.addToIndex(nodeRef, 'name', 'Dovakiin')client.indexRef2.addToIndex(nodeRef, 'job', 'Dragon Slayer')

在neo4j中还有一个自动索引功能,如果您希望节点自动添加到索引中