Установка меток узлов с параметром

Я пытаюсь загрузить данные Twitter в Neo4J, используя .Net Neo4JClient. По сути, это один и тот же тип пользовательских данных Twitter для каждого узла, но некоторые из узлов имеют другое значение, поэтому я хотел бы обозначить их по-разному.

(Я новичок как в Neo4J, так и в клиенте).

Поэтому я пытался обозначить их так:

var query = _client.Cypher
              .Create("(primaryNode:nodeLabel {twitterUser})")
              .WithParams(new { nodeLabel = "nodeType", twitterUser } );


query.ExecuteWithoutResults();

Примечание. Я разделил ExecuteWithoutResults, чтобы отлаживать запрос, и он регистрирует параметры в порядке. Документация здесь:

https://github.com/Readify/Neo4jClient/wiki/cypher#explicit-parameters

... предполагает, что параметры могут быть созданы «в любой точке свободного запроса», но документация Neo о параметрах здесь:

http://docs.neo4j.org/chunked/1.8.2/cypher-parameters.html

... как бы предполагает обратное, что параметры предназначены специально для таких вещей, как предложения WHERE, индексы и идентификаторы отношений.

В любом случае, когда я выполняю вышеописанное, я получаю новый блестящий узел с меткой «nodeLabel», поэтому параметр не работает. Может ли кто-нибудь прояснить, делаю ли я просто глупую ошибку новичка?


person ShakeyDave    schedule 11.02.2014    source источник


Ответы (1)


Вы можете вызывать WithParams в любое время в запросе. Это то, что документ Neo4jClient означает «в любой момент запроса fluent».

Однако Neo4j поддерживает параметры только в определенных частях текста Cypher. Если параметр повлияет на план запроса, он не разрешен.

В этом случае нельзя использовать параметры для меток. Вам нужно будет создать запрос динамически, если вы хотите это сделать.

Редактировать: даже если бы это было поддерживаемое место для параметров, вам, по крайней мере, нужно было бы написать {nodeLabel} в вашем Cypher вместо просто nodeLabel.

person Tatham Oddie    schedule 11.02.2014
comment
Спасибо за последнее редактирование. Я пытался заключить параметры nodeLabel (которые, как я теперь знаю, не поддерживаются) в фигурные скобки, но это все равно не сработало. Сначала меня немного смутила документация Neo4JClient о параметрах и фигурных скобках, но, прочитав документацию Neo4J о параметрах, выяснилось, что те области запроса Cypher, которые принимают параметры, заключены в фигурные скобки в необработанном Cypher, поэтому Neo4JClient просто отражает это своим синтаксис запроса. (Я думаю?) - person ShakeyDave; 14.02.2014
comment
Из того, что я понял, метки — это функция версии 2.0, над которой у разработчиков Neo4J еще много работы, не так ли? Так что, возможно, их параметризация в запросах Cypher находится в списке предстоящих функций? - person ShakeyDave; 14.02.2014
comment
Neo4jClient просто передает этот синтаксис прямо в Neo4j, не меняя его. Метки зрелые, но они не имеют смысла с параметризацией. Параметры не могут влиять на план запроса, иначе они наполовину бессмысленны. Метки должны влиять на план запроса, иначе они наполовину бессмысленны. - person Tatham Oddie; 16.02.2014