2014-11-23 4 views
2

Я уверен, что я должен увидеть ошибку, которую я делаю сам. И я также уверен, что я должен знать, как построить достойный запрос cypher в java, но я просто не могу. Уже поздно, и я пробиваю себе голову с последних 4 часов. Итак, я сдаюсь.java neo4j cypher query to match node

У меня есть относительно просто Cypher запрос я хочу, чтобы выполнить против открытой транзакции конечной

http://localhost:7474/db/data/transaction/[# number] 

Так я вычислял, я делаю это так, как я это делаю при создании узла, а просто совпадают вместо создать:

{"statements": [ {"statement": "MATCH (p:POST {properties}) RETURN p", "parameters": {"properties":{"sn_id": "TW", "id": "536627264453353472"}} } ] } 

Но сервер говорит мне, что я не могу использовать карты параметров в матче, как, что:

TRACE Neo4JPersistence - sending cypher {"statements": [ {"statement": "MATCH (p:POST {properties}) RETURN p", "parameters": {"properties":{"sn_id": "TW", "id": "536627264453353472"}} } ] } to endpoint http://localhost:7474/db/data/transaction/75 
    TRACE Neo4JPersistence - GET to http://localhost:7474/db/data/transaction/75 returned status code 200, returned data: {"commit":"http://localhost:7474/db/data/transaction/75/commit","results":[],"transaction":{"expires":"Sun, 23 Nov 2014 21:09:05 +0000"},"errors":[{"code":"Neo.ClientError.Statement.InvalidSyntax","message":"Parameter maps cannot be used in MATCH patterns (use a literal map instead, eg. \"{id: {param}.id}\") (line 1, column 15)\n\"MATCH (p:POST {properties}) RETURN p\"\n    ^"}]} 
    ERROR Neo4JPersistence - ERROR :: [{"message":"Parameter maps cannot be used in MATCH patterns (use a literal map instead, eg. \"{id: {param}.id}\") (line 1, column 15)\n\"MATCH (p:POST {properties}) RETURN p\"\n    ^","code":"Neo.ClientError.Statement.InvalidSyntax"}] - could not execute cypher statement at location http://localhost:7474/db/data/transaction/75 

Итак, хорошо, подумал я. Давайте что-то более простое, и я построил мой шифр, как это:

{"statements": [ {"statement": "MATCH (p:SOCIALNETWORK {"sn_id": "TW"}) RETURN p"} ] } 

Но для этого, сервер возвращает, что он не может десериализацию запроса, и что он не любит с - в зависимости от того s, что есть.

Вот трассировки стека для него:

TRACE Neo4JPersistence - sending cypher {"statements": [ {"statement": "MATCH (p:SOCIALNETWORK {"sn_id": "TW"}) RETURN p"} ] } to endpoint http://localhost:7474/db/data/transaction/76 
TRACE Neo4JPersistence - GET to http://localhost:7474/db/data/transaction/76 returned status code 200, returned data: {"commit":"http://localhost:7474/db/data/transaction/76/commit","results":[],"transaction":{"expires":"Sun, 23 Nov 2014 21:18:01 +0000"},"errors":[{"code":"Neo.ClientError.Request.InvalidFormat","message":"Unable to deserialize request: Unexpected character ('s' (code 115)): was expecting comma to separate OBJECT entries\n at [Source: [email protected]{[email protected]{r=10,a=DISPATCHED,uri=/db/data/transaction/76},[email protected]{FILLING},g=HttpGenerator{s=START},p=HttpParser{s=END,87 of 87}}; line: 1, column: 59]"}]} 
ERROR Neo4JPersistence - ERROR :: [{"message":"Unable to deserialize request: Unexpected character ('s' (code 115)): was expecting comma to separate OBJECT entries\n at [Source: [email protected]{[email protected]{r=10,a=DISPATCHED,uri=\/db\/data\/transaction\/76},[email protected]{FILLING},g=HttpGenerator{s=START},p=HttpParser{s=END,87 of 87}}; line: 1, column: 59]","code":"Neo.ClientError.Request.InvalidFormat"}] - could not execute cypher statement at location http://localhost:7474/db/data/transaction/76 

я застрял и разочарование в настоящее время. Может ли кто-нибудь помочь мне снова ???

Большое спасибо заранее,

Christian

ответ

3

В отличие от создания, MATCH не может использовать свойство Map- это требует использования литералов. Таким образом, ваш запрос должен в конечном итоге выглядит так:

{ 
    "statements" : 
    [ 
     { 
     "statement": "MATCH (p:SOCIALNETWORK {sn_id: {snid}}) RETURN p", 
     "parameters": {"snid": "TW"} 
     } 
    ] 
} 

В вашем втором запросе, не вставил ключ свойство в кавычки:

{"statements": 
[ 
    { 
    "statement": "MATCH (p:SOCIALNETWORK {sn_id: 'TW'}) RETURN p" 
    } 
] 
} 
+0

спасибо большое. Я получил это с вашим ответом. Однако остается один вопрос. Как получить идентификатор, или даже лучше URL-адрес узла, который я нашел с указанным выше запросом. Я надеялся получить структуру расширений json с запросом, поэтому я мог бы использовать самополе в json. Но похоже, что он не вернулся. Можете ли вы направить меня и на это? – siliconchris

+0

Возвращающийся идентификатор (p) даст вам другой столбец с идентификатором узла.Если вы хотите получить полный URL-адрес узла, включите resultDataContents: ["REST"], как в {"statements": [{"statement": "MATCH (p: SOCIALNETWORK {sn_id: 'TW}) RETURN p", "resultDataContents": ["REST"]}]} См. http://neo4j.com/docs/stable/rest-api-transactional.html#rest-api-execute-statements-in-an-open-transaction-in -rest-format-for-the-return – Luanne

+0

Получил его на работу. Для всех людей там ее – siliconchris

0

Начиная с версии 2.0.5, вы можете использовать недвижимость карта с MATCH¥ (and MERGE):

{ 
    "statements" : 
    [ 
     { 
     "statement": "MATCH (p:SOCIALNETWORK {sn_id: {properties}.sn_id)}) RETURN p", 
     "parameters": { "properties": {"snid": "TW"} } 
     } 
    ] 
} 

Не совсем еще так гладко, как именно h CREATE, но все же улучшение.


¥ К сожалению, это официально задокументированы только для MERGE и не MATCH, но испытано и используется каждый день по-настоящему ваша

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