2

我需要一个非常简单的示例,说明如何使用 Neo4JClient 将节点添加到索引

在以下 C# 代码中,我创建了一个索引和一个员工节点。

问题:
在下面的代码中,如何将创建的节点添加到索引中?解决方案应允许搜索 EmployeeID 或 Name。

    课堂节目
    {
        静态无效主要(字符串 [] 参数)
        {
            //连接到 Neo4J
            var graphClient = new GraphClient(new Uri(@"http://localhost:7474/db/data"));
            graphClient.Connect();

            //创建索引
            graphClient.CreateIndex("employee", new IndexConfiguration() { Provider = IndexProvider.lucene, Type = IndexType.exact }, IndexFor.Node);

            //创建一个员工节点
            var employee = new Employee() { EmployeeID = "12345", Name = "Mike"};
            NodeReference employeeRef = graphClient.Create(employee);

            //将刚刚创建的节点添加到Employee索引中。  

        }
        私人类雇员
        {
            [JsonProperty("EmployeeID")]
            公共字符串 EmployeeID { 获取;放; }

            [JsonProperty("名称")]
            公开
4

1 回答 1

2

注意:此答案适用于 Neo4jClient 1.0.0.474。确保您已更新。

创建节点时,您可以提供索引条目:

var employeeRef = graphClient.Create(
    employee,
    new IRelationshipAllowingParticipantNode<Employee>[0],
    new []
    {
        new IndexEntry("employee")
        {
            {"EmployeeID", 1234 },
            { "Name", "Mike" }
        }
    }
);

由于以下几个原因,它看起来有点冗长:

  1. 如果没有至少一个关系,您几乎永远不会创建节点。这些关系将在第二个参数中很好地叠加。

  2. 一个节点可以在多个索引中结束,并且键和值不必与该节点匹配。

我们想让这个语法更适合默认场景,但还没有做到。

更新节点时,您还需要提供新的索引条目:

graphClient.Update(employeeRef,
    e =>
    {
        e.Name = "Bob";
    },
    e => new[]
    {
        new IndexEntry("employee") { { "Name", e.Name } }
    });

您可以重新索引节点而不使用更新节点本身graphClient.ReIndex

如果要将现有节点添加到索引而不更新它,也可以使用graphClient.ReIndex。(该方法不对节点已经在索引中做出任何假设。)

于 2012-09-20T00:08:36.623 回答