0

Neo4j と Neo4jClient を使い始めようとしています。私が試みようとしている最初のことは、publication_number プロパティを持つ一連のノードを挿入することです。各ノードを挿入する前に、同じパブリケーション番号を持つ別のノードが存在しないことを確認する必要があります。この目的のために、publication_number のインデックスを作成し、クエリを実行しました。

これは私がこれまでに持っているコードです。(明らかに、上記のすべてのロジックは実装されていませんが、これを機能させることさえできません。)

class Program
{
    static void Main(string[] args)
    {
        var client = new GraphClient(new Uri("http://192.168.12.31:7474/db/data"));
        client.Connect();

        // create index
        client.CreateIndex("publication_number_idx", new IndexConfiguration
        {
            Provider = IndexProvider.lucene,
            Type = IndexType.exact
        },
        IndexFor.Node);

        // create record
        Record record1 = new Record { publication_number = "1" };
        Record record2 = new Record { publication_number = "2" };

        // add record1 to graph and index
        var record1Ref = client.Create(record1);
        client.ReIndex(record1Ref, new[] { new IndexEntry ("publication_number_idx") { { "publication_number", record1.publication_number } } });
        Console.WriteLine("Added record1 at {0}", record1Ref.Id);

        // add record2 to graph and index
        var record2Ref = client.Create( record2, 
                                        new[] { new Cites(record1Ref) { Direction = RelationshipDirection.Outgoing } },
                                        new[] { new IndexEntry("publication_number_idx") { {"publication_number", record2.publication_number } } });
        Console.WriteLine("Added record2 at {0}", record2Ref.Id);

        // 500 error here
        client.QueryIndex<Record>("publication_number_idx", IndexFor.Node, @"START n=node:publication_number_idx(publication_number = ""2"") RETURN n;");

    }

}

public class Cites : Relationship, IRelationshipAllowingSourceNode<Record>, IRelationshipAllowingTargetNode<Record>
{
    public Cites(NodeReference targetNode)
        : base(targetNode)
    {
    }

    public const string TypeKey = "CITES";

    public override string RelationshipTypeKey
    {
        get { return TypeKey; }
    }
}

メモの追加とインデックスの更新に成功したようです。コンソールで Cypher を使用してインデックスをクエリできます。ただし、Neo4J クライアントで同じ Cypher クエリを使用すると、クエリで 500 内部サーバー エラーが発生します。

未処理の例外: System.ApplicationException: 要求の実行時に予期しない HTTP ステータスを受け取りました。

応答ステータス: 500 Internal Server Error

Neo4j からの応答 (役に立つ詳細が含まれている可能性があります!) は次のとおりです。{
"exception": "NullPointerException", "fullname": "java.lang.NullPointerException", "stacktrace": [ "org.apache.lucene.util.SimpleStringInterner.intern(SimpleStringInterner.java:54)", "org.apache" .lucen e.util.StringHelper.intern(StringHelper.java:39)"、"org.apache.lucene.index.Term.(Term.java:38)"、"org.apache.luce ne.queryParser.QueryParser. getFieldQuery(QueryParser.java:643)"、"org.apache.lucene.queryParser.QueryParser.Term(QueryParser.java:1436)"、"org.apache.lucene.queryParser.QueryParser.Clause(QueryParser.java:1319) )"、"org.apache.lucene.queryParser.QueryParser.Query(QueryParser.java:1245)"、"org.apache.lucene.queryParser.QueryParser.TopLevelQuery(QueryParser.java :1234)"、"org.apache.lucene.queryParser.QueryParser.parse(QueryParser.java:206)」、「org.neo4j.index.impl.lucene.IndexType .query(IndexType.java:300)」、「org.neo4j.index. impl.lucene.LuceneIndex.query(LuceneIndex.java:227)"、"org.neo4j.server.re st.web.DatabaseActions.getIndexedNodesByQuery(DatabaseActions.java:889)"、"org.neo4j.server.rest.web .DatabaseActions.get IndexedNodesByQuery(DatabaseActions.java:872)"、"org.neo4j.server.rest.web.RestfulGraphDatabase.getIndexedNodesByQuery(R estfulGraphDatabase.java:707)"、"java.lang.reflect.Method.invoke(メソッド.java:606)", "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)" ] } で Neo4jClient.GraphClient.SendHttpRequest(HttpRequestMessage request, String commandDescription,HttpStatusCode[] expectedStatusCodes) c:\TeamCity\buildAgent\work\f1c4cf3efbf1b05e\Neo4jClient\GraphClient.cs:Neo4jClient.GraphClient.QueryIndex[TNode](String indexName, IndexFor indexFor, String query) の 137 行 c:\TeamCity \buildA gent\work\f1c4cf3efbf1b05e\Neo4jClient\GraphClient.cs: c:\Users\Yellick Chris\Documents\Visual Studio 2012\Projects\Antares\Antares\ の Antares.Program.Main(String[] args) の行 1168 Program.cs:41行目\Users\Yellick Chris\Documents\Visual Studio 2012\Projects\Antares\Antares\Program.cs:41行目\Users\Yellick Chris\Documents\Visual Studio 2012\Projects\Antares\Antares\Program.cs:41行目

4

1 に答える 1

1

500 エラーが何であるかはわかりませんが、クエリを機能させるための解決策は、「QueryIndex」呼び出し (廃止されました) を削除し、Cypher 表記に置き換えることです。

var query = client.Cypher
        .Start(new {n = Node.ByIndexLookup("publication_number_idx", "publication_number", "2")})
        .Return<Record>("n");

var results = query.Results;

「QueryIndex」で使用されるクエリは、あなたのものとは異なる形式を持っています。Neo4jclient Index Documentation=を見ると、次のように置き換えて:ラップする必要があります'

client.QueryIndex<Record>("publication_number_idx", IndexFor.Node, @"START n=node:publication_number_idx('publication_number: ""2""') RETURN n;");

それで500エラーが修正されるわけではありません。

于 2013-09-27T07:32:55.623 に答える