Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带索引的Neo4jClient加载_C#_Insert_Indexing_Neo4j_Neo4jclient - Fatal编程技术网

C# 带索引的Neo4jClient加载

C# 带索引的Neo4jClient加载,c#,insert,indexing,neo4j,neo4jclient,C#,Insert,Indexing,Neo4j,Neo4jclient,Neo4J和.NETNeo4jClient非常新,但我正在尝试启动并运行一个基本项目。有人会有一些基本的代码或示例来向服务器添加带有索引的节点,同时允许相同节点类型之间的关系吗?该项目的最终目标是创建普林斯顿Wordnet的图形版本- 最初,我试图在两个相同类型的节点之间创建一个关系,称它们为根单词。它们应该通过同义词关系进行关联。根节点将需要完全文本索引以允许搜索。这个“应该”允许我搜索给定词根的所有同义词 我是这样看待这种关系的: (RootWord1,键入[A])(RootWord2,键入

Neo4J和.NETNeo4jClient非常新,但我正在尝试启动并运行一个基本项目。有人会有一些基本的代码或示例来向服务器添加带有索引的节点,同时允许相同节点类型之间的关系吗?该项目的最终目标是创建普林斯顿Wordnet的图形版本-

最初,我试图在两个相同类型的节点之间创建一个关系,称它们为根单词。它们应该通过同义词关系进行关联。根节点将需要完全文本索引以允许搜索。这个“应该”允许我搜索给定词根的所有同义词

我是这样看待这种关系的:

(RootWord1,键入[A])<==:[IS_同义词]=>(RootWord2,键入[A]

这些是我开始的基本结构:

public class RootWord
    {
        [JsonProperty()]             
        public string Term { get; set; }
    }

public class IsSynonym : Relationship
        , IRelationshipAllowingSourceNode<RootWord>
        , IRelationshipAllowingTargetNode<RootWord>
    {
        public const string TypeKey = "IS_SYNONYM";

        public IsSynonym(NodeReference targetNode)
            : base(targetNode){}

        public IsSynonym(NodeReference targetNode, object data)
            : base(targetNode, data){}

        public override string RelationshipTypeKey
        {
            get { return TypeKey; }
        }
    }
公共类RootWord
{
[JsonProperty()]
公共字符串项{get;set;}
}
公共类IsSynonym:关系
,IRelationshipAllowingSourceNode
,IRelationshipAllowingTargetNode
{
public const string TypeKey=“是同义词”;
public issynnym(NodeReference targetNode)
:base(targetNode){}
public issynnym(节点引用目标节点,对象数据)
:base(targetNode,数据){}
公共重写字符串RelationshipTypeKey
{
获取{return TypeKey;}
}
}

我已经关注这个问题有一段时间了,非常感谢您的帮助。

下面的代码将为根单词添加一个同义词:(您可能需要检查您的“单词”和“同义词”是否已经在数据库中,以便您可以创建一个关系)

“GetIndexEntries”方法获取要放入对象(RootWord)索引中的条目,因为您只有一个术语,这很简单:

private static IEnumerable<IndexEntry> GetIndexEntries(RootWord rootWord, string indexName)
{
    var indexKeyValues =
        new List<KeyValuePair<string, object>>
            {
                new KeyValuePair<string, object>("term", rootWord.Term)
            };

    return new[]
               {
                   new IndexEntry
                       {
                           Name = indexName,
                           KeyValues = indexKeyValues.Where(v => v.Value != null)
                       }
               };
}
(假设节点0是您想要的根单词!)将返回“Great”节点。 同时,由于我们还创建了全文索引,您可以使用以下代码搜索根词:

public static void QueryTerms(IGraphClient gc, string query)
{
    var result = gc.QueryIndex<RootWord>("synonyms", IndexFor.Node, "term:" + query).ToList();
    if (result.Any())
        foreach (var node in result)
            Console.WriteLine("node: {0} -> {1}", node.Reference.Id, node.Data.Term);
    else
        Console.WriteLine("No results...");
}
publicstaticvoidqueryterms(igraphclientgc,字符串查询)
{
var result=gc.QueryIndex(“同义词”,IndexFor.Node,“术语:”+query.ToList();
if(result.Any())
foreach(结果中的var节点)
WriteLine(“节点:{0}->{1}”,node.Reference.Id,node.Data.Term);
其他的
Console.WriteLine(“无结果…”);
}

一旦有了这些节点,您就可以遍历“IS_SYNONYM”关系以获得实际的同义词。

下面的代码将向根词添加一个同义词:(您可能需要检查您的“word”和“SYNONYM”是否已经在数据库中,这样您就可以创建一个关系)

“GetIndexEntries”方法获取要放入对象(RootWord)索引中的条目,因为您只有一个术语,这很简单:

private static IEnumerable<IndexEntry> GetIndexEntries(RootWord rootWord, string indexName)
{
    var indexKeyValues =
        new List<KeyValuePair<string, object>>
            {
                new KeyValuePair<string, object>("term", rootWord.Term)
            };

    return new[]
               {
                   new IndexEntry
                       {
                           Name = indexName,
                           KeyValues = indexKeyValues.Where(v => v.Value != null)
                       }
               };
}
(假设节点0是您想要的根单词!)将返回“Great”节点。 同时,由于我们还创建了全文索引,您可以使用以下代码搜索根词:

public static void QueryTerms(IGraphClient gc, string query)
{
    var result = gc.QueryIndex<RootWord>("synonyms", IndexFor.Node, "term:" + query).ToList();
    if (result.Any())
        foreach (var node in result)
            Console.WriteLine("node: {0} -> {1}", node.Reference.Id, node.Data.Term);
    else
        Console.WriteLine("No results...");
}
publicstaticvoidqueryterms(igraphclientgc,字符串查询)
{
var result=gc.QueryIndex(“同义词”,IndexFor.Node,“术语:”+query.ToList();
if(result.Any())
foreach(结果中的var节点)
WriteLine(“节点:{0}->{1}”,node.Reference.Id,node.Data.Term);
其他的
Console.WriteLine(“无结果…”);
}

一旦有了这些节点,您就可以遍历“IS_SYNONYM”关系以获得实际的同义词。

嘿,Bagsy,您的示例中的“Type[A]”是什么意思?另外,您是否希望找到给定起始词的同义词?我有从NLTK将WordNet加载到Neo4j中的Python代码——这对您有用吗?嘿,Bagsy,您的示例中的“Type[a]”是什么意思?还有,你想找到有起始词的同义词吗?我有从NLTK将WordNet加载到Neo4j的Python代码——这对你有用吗?@espeed——那Python脚本绝对值得一看,谢谢!!克里斯:这是你的第一个评论,这正是我想要做的。给定一个根单词,返回同义词。类型[A]只是表示两个术语属于同一类型,即RootWord。另外,非常感谢上面的代码。我刚刚浏览了一下,但有一个问题;在创建wordReference和synonymReference时,是否也应该存在关系?换句话说,上面的代码是否创建了多个孤立节点,或者同义词是否以某种方式与根单词相关?嘿,Chris,刚刚再次运行了代码。我现在明白你是在哪里建立关系的了。真是一种享受!非常感谢,再次感谢…@espeed-python脚本绝对值得一看,谢谢!!克里斯:这是你的第一个评论,这正是我想要做的。给定一个根单词,返回同义词。类型[A]只是表示两个术语属于同一类型,即RootWord。另外,非常感谢上面的代码。我刚刚浏览了一下,但有一个问题;在创建wordReference和synonymReference时,是否也应该存在关系?换句话说,上面的代码是否创建了多个孤立节点,或者同义词是否以某种方式与根单词相关?嘿,Chris,刚刚再次运行了代码。我现在明白你是在哪里建立关系的了。真是一种享受!非常感谢,再次感谢。。。