2013-09-27 30 views
0

我正在嘗試使用Neo4j和Neo4jClient;我試圖嘗試的第一件事是插入一系列具有publication_number屬性的節點。在插入每個節點之前,我想檢查確保具有相同發佈號的另一個節點不存在。爲此,我爲publication_number創建了一個索引,然後再查詢。查詢索引時500內部服務器錯誤

這是我到目前爲止的代碼。 (顯然,所有上述邏輯尚未實現,但我甚至不能得到這個工作。)

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內部服務器錯誤

從Neo4j的反應是(其中可能包含有用的細節!):{
「異常」: 「NullPointerException異常」, 「全名」: 「 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(QueryPa rser.java:1436)「, 」 org.apache.lucene.queryParser.QueryParser.Clause(QueryParser.java :1319) 「 」org.apache.lucene.queryPar ser.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(Datab aseActions.java:889) 「 」org.neo4j.server.rest.web.DatabaseActions.get IndexedNodesByQuery(DatabaseActions.java:872)「, 」 org.neo4j.server.rest.web.RestfulGraphDatabase.getIndexedNodesByQuery( ( estfulGraphDatabase.java:707)「, 」java.lang.reflect.Method.invoke(Method.java:的java:112)」]}在 Neo4jClient.GraphClient.SendHttpRequest(HttpRequestMessage請求, 字符串commandDescription,HttpStatusCode []前pectedStatusCodes)在 C:\ TeamCity的\ buildAgent \工作\ f1c4cf3efbf1b05e \ Neo4jClient \ GraphClient.cs:線 137在Neo4jClient.GraphClient.QueryIndex [TNode](String indexName, IndexFor indexFor,字符串查詢)在C:\ TeamCity的\ buildA 紳士\工作\ f1c4cf3efbf1b05e \ Neo4jClient \ GraphClient.cs:在 Antares.Program.Main(字串[] args)在C線1168:\用戶\ Yellick Chris \ Documents \ Visual Studio 2012 \ Projects \ Antares \ Antare s \ Program。CS:行41

回答

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錯誤。

+0

我想500錯誤可能需要保持一點神祕,但Cypher表示法修復它。非常感謝。 – Chris

+0

我非常確定這是查詢以及它如何發送到數據庫。 Cypher符號是更好的符號:) –