2013-03-28 4 views
0

Я пытаюсь выполнить запрос на мой NameIndex в Neo4j используя Neo4jClient для .NET, но я получаю эту ошибку:Стараясь выполнить индексной Cypher запрос в Neo4jClient.NET

{"Received an unexpected HTTP status when executing the request.\r\n\r\nThe response status was: 500 Internal Server Error\r\n\r\nThe raw response body was: {\"exception\":\"NullPointerException\",\"stacktrace\":[\"org.apache.lucene.util.SimpleStringInterner.intern(SimpleStringInterner.java:54)\",\"org.apache.lucene.util.StringHelper.intern(StringHelper.java:39)\",\"org.apache.lucene.index.Term.<init>(Term.java:38)\",\"org.apache.lucene.queryParser.QueryParser.getFieldQuery(QueryParser.java:643)\",\"org.apache.lucene.queryParser.QueryParser.Term(QueryParser.java:1421)\",\"org.apache.lucene.queryParser.QueryParser.Clause(QueryParser.java:1309)\",\"org.apache.lucene.queryParser.QueryParser.Query(QueryParser.java:1237)\",\"org.apache.lucene.queryParser.QueryParser.TopLevelQuery(QueryParser.java:1226)\",\"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.rest.web.DatabaseActions.getIndexedNodesByQuery(DatabaseActions.java:977)\",\"org.neo4j.server.rest.web.DatabaseActions.getIndexedNodesByQuery(DatabaseActions.java:960)\",\"org.neo4j.server.rest.web.RestfulGraphDatabase.getIndexedNodesByQuery(RestfulGraphDatabase.java:692)\",\"java.lang.reflect.Method.invoke(Unknown Source)\"]}"} 

Мой метод выглядит следующим образом :

public IEnumerable GraphGetNodeByName(string NodeName) 
     { 
      GraphOperationsLogger.Trace("Now entering GraphGetNodeByName() method"); 

      IEnumerable QueryResult = null; 


       GraphOperationsLogger.Trace("Now performing the query"); 
       var query = client_connection.QueryIndex<GraphNode>("NameIndex", IndexFor.Node, 
       //Here I want to pass in the NodeName into the query 
       //@"Start n = node:NameIndex(Name = '"+ NodeName +"') return n;"); 
       //Here I am hard-coding the NodeName 
        @"Start n = node:NameIndex(Name = ""Mike"") return n;"); 
       QueryResult = query.ToList(); 


      return QueryResult; 
     } 

я в идеале хотел бы передать в NodeName в запросе, но это не работает поэтому я попытался жесткого кодирования его и что также не работает. Оба сценария создают одно и то же сообщение об ошибке?

ответ

3

Метод, который вы вызываете, IGraphClient.QueryIndex не является методом Cypher. Это обертка на http://docs.neo4j.org/chunked/milestone/rest-api-indexes.html#rest-api-find-node-by-query. Это более старый API, от Cypher.

Вы уже на полпути, хотя, потому что ваши комментарии кода включают Cypher запрос:

Start n = node:NameIndex(Name = "Mike") 
return n; 

Итак, давайте просто перевести, что в C#:

client 
    .Cypher 
    .Start(new CypherStartBitWithNodeIndexLookup("n", "NameIndex", "Name", "Mike")) 
    .Return<Node<Person>>("n"); 

Всегда начинайте свои Cypher запросы от IGraphClient.Cypher или NodeReference.StartCypher (что является просто ярлыком для первого).

Есть некоторые другие проблемы, связанные с вашим методом:

  1. Вы возвращающие сырой IEnumerable. Что в нем? Вы должны вернуть IEnumerable<T>.
  2. Вы звоните query.ToList(). Я был бы удивлен, если это даже скомпилируется. Вы хотите набрать ToList по результатам, чтобы перечислимый был поражен.
  3. В C# ваши локальные переменные должны быть в camelCase не PascalCase. То есть, queryResult вместо QueryResults.

Сочетание всех этих точек, ваш метод должен быть:

public IEnumerable<Person> GetPeopleByName(string name) 
{ 
    return graphClient 
     .Cypher 
     .Start(new CypherStartBitWithNodeIndexLookup("n", "NameIndex", "Name", "Mike")) 
     .Return<Node<Person>>("n") 
     .Results 
     .ToList(); 
} 
+0

спасибо дружище, ты уверен, что это хорошо. Какова последняя версия Neo4jClient для .NET? –

+0

Последняя версия доступна по адресу http://nuget.org/packages/Neo4jClient. Мы выпускаем очень часто - иногда несколько раз в день. Посмотрите на таблицу истории версий на этой странице. –

 Смежные вопросы

  • Нет связанных вопросов^_^