Невозможно запросить свойства с двоеточием

Я новичок в neo4j, поэтому мой вопрос может показаться вам глупым, но в любом случае.

У меня есть набор данных OSM, импортированный в базу данных neo4j graph. Итак, в настоящее время я пытаюсь запросить разные вещи из db, например:

MATCH (a) WHERE has(a.addr:street) RETURN a.addr:street

и он не работает с ошибкой sysntax:

Type mismatch: expected Node but was Boolean, Number, String or Collection<Any> (line 1, column 23)
"MATCH (a) WHERE has(a.addr:street) RETURN a.addr:street"
                       ^

Что странно, поскольку у узлов много свойств с двоеточиями (:).

Кто-нибудь знает, как я могу запросить такие свойства?


person Taras Shchybovyk    schedule 18.11.2013    source источник


Ответы (2)


Добро пожаловать в Neo4j! Такие символы, как : или пробел, могут внести двусмысленность в запрос, так как они могут иметь значение в языке запросов, что дает возможность синтаксическому анализатору сбиться с пути. Вы по-прежнему можете использовать эти символы, заключив выражение в «обратные кавычки», т. Е.

MATCH (a) WHERE has(a.`addr:street`) RETURN a.`addr:street`

Вы можете увидеть некоторые другие примеры здесь.

person jjaderberg    schedule 18.11.2013
comment
Спасибо, это работает. Но я вижу странную вещь: этот запрос не работает из новой оболочки веб-интерфейса (2.0). Я получаю сообщение об ошибке «Недопустимый ввод»: ожидаемый пробел или идентификатор (строка 1, столбец 29). А вот с оболочкой все работает исправно. - person Taras Shchybovyk; 18.11.2013
comment
Вы должны использовать обратные кавычки: [`], а не одинарные кавычки: [']. (Тот же символ, что и в StackOverflow для публикации фрагментов короткого кода.) - person jjaderberg; 18.11.2013

Шифровальный запрос состоит из трех частей:

СТАРТ, МАТЧ И ВОЗВРАТ. Итак, ваш запрос здесь будет:

START a=node(1)
MATCH (a)-[:HAS]->(addr)-[:HAS]->(street)
RETURN street
person dev    schedule 18.11.2013
comment
Наверное, я плохо объяснил. Проблема в том, что узлы в db содержат такие свойства, как (key = addr: street, value = Rennweg). Поэтому я не могу запрашивать узлы с такими обозначениями свойств. Если a.addr: street будет заменено на a.name - все в порядке. - person Taras Shchybovyk; 18.11.2013