这就是我的问题。我在我的Neo4j中插入人员列表(具有唯一标识符),并创建他们之间的关系。
要知道此人是否已经存在于Neo4j中,然后创建/更新它,最有效的方法是什么?由于Neo4jclient不支持标签,是将类型信息存储为节点的属性更有效,还是将同一类型的所有节点链接到该类型的“根节点”更好?
先谢谢你,
埃默里
发布于 2013-10-10 04:51:56
Neo4jClient确实支持标签,通过标准密码。(内部版本1.0.0.602及更高版本。)
graphClient
.Merge("(p:Person {jim}")
.WithParam("jim", new Person { Name = "Jim" })
.ExecuteWithoutResults();您也可以退还它:
var jimNode = graphClient
.Merge("(p:Person {jim}")
.WithParam("jim", new Person { Name = "Jim" })
.Return(p => p.Node<Person>())
.Results
.Single();发布于 2013-10-09 16:27:38
您可以添加到索引并执行索引查询,因此:
创建索引:
if (!client.CheckIndexExists("Persons", IndexFor.Node))
client.CreateIndex("Persons", new IndexConfiguration {Provider = IndexProvider.lucene, Type = IndexType.exact}, IndexFor.Node);添加人员(具有索引条目)
var chris = new Person {Name = "Chris", Id = DateTime.Now.Ticks};
client.Create(chris, null, GetIndexEntries(chris));其中GetIndexEntries看起来像:
private static IEnumerable<IndexEntry> GetIndexEntries(Person person)
{
var indexEntries = new List<IndexEntry>
{
new IndexEntry
{
Name = "Persons",
KeyValues = new List<KeyValuePair<string, object>>
{
new KeyValuePair<string, object>("name", person.Name),
new KeyValuePair<string, object>("id", person.Id)
}
}
};
return indexEntries;
}然后查询索引:
var indexQuery =
client.Cypher
.Start(new {n = Node.ByIndexLookup("Persons", "name", "Chris")})
.Return<Node<Person>>("n");
var results = indexQuery.Results.ToList();
Console.WriteLine("Found {0} results", results.Count());
foreach (var result in results)
Console.WriteLine(result.Data.Id);https://stackoverflow.com/questions/19266023
复制相似问题