2013-09-11 2 views
0

Сегодня я пробовал обновлять Neo4j до 2.0.0.M05. После запуска тестов моего приложения, что не удалось мне, это фильтрация узлов с помощью (нескольких) меток.Neo4j 2.0.0.M05 - Cypher изменяет предикаты функций по меткам

Раньше я пытался сделать это с (источник: http://docs.neo4j.org/chunked/2.0.0-M05/query-where.html#where-filter-on-node-label):

START node=node(*) WHERE node LABEL [:mylabel] RETURN node 

Что с ошибкой вы можете посмотреть здесь: http://console-test.neo4j.org/r/irh886

В качестве обходного пути, я использовал функцию предиката и создали запрос:

START node=node(*) 
WHERE ANY (label in labels(node) WHERE label IN ['mylabel']) 
RETURN node 

Это работало в 2.0.0.M03 и 2.0.0.M04, но не работает в 2.0.0.M05 с ошибкой вы можете увидеть здесь: http://console-test.neo4j.org/r/scx0j4

Любое нарушение в 2.0.0.M05 Мне не хватает из-под журнала изменений? Я смотрел http://blog.neo4j.org/2013/09/neo4j-200m05-released.html, но не вижу никаких изменений, связанных с этим.

Спасибо!

ответ

1

Да, это похоже на проблему с документацией. Похоже, что они удалили длинную форму предиката LABEL.

Похоже, что способов сделать это являются:

WHERE node:myLabel:myLabel2 

или

WHERE node:myLabel OR node:myLabel2 

Если вам действительно нужно сравнить с массивом, как вы делаете, то ваш обходной путь кажется разумным. Хотя использование node(*) не похоже на лучший способ эффективного поиска помеченных узлов.

Старый синтаксический анализатор по-прежнему доступен, если вы префиксный запрос cypher с cypher legacy, но он также удаляется оттуда в M05.

+0

Tnx для вашего ответа! Итак, если я правильно понимаю документацию, узел: myLabel: myLabel2 означает, что узел должен иметь обе метки, а не любые из этих двух. Кроме того, в M03 мое обходное решение анализировалось довольно быстро, чем ваш второй пример (node: myLabel OR node: myLabel2), поэтому я использовал его вместо второго примера. Узел (*) предназначен только для примера. В моем случае всегда есть список идентификаторов узлов, поэтому у меня всегда есть, например, узла (1, 2, 3). На ваш взгляд, это ошибка, о которой следует сообщить? –

+0

Я упоминал о проблемах с документами нео-парням, и они собираются исправить это. Не стесняйтесь сообщать о проблеме производительности с запросом 'OR', если вы считаете, что это важно. (и да, первый - это «AND» предикатов меток) –

+0

Ну, для ошибки я действительно имел в виду предикат функции (второй пример в моем вопросе), который не работает. Для возможной проблемы с производительностью, я рассмотрю ее и посмотрю, как она ведет себя в M05. –

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