Ответ 1
Есть метки функций (node), которые могут возвращать все метки для node.
Я не могу найти, как вернуть метки node с помощью Cypher.
Кто-нибудь знает синтаксис этой операции?
Есть метки функций (node), которые могут возвращать все метки для node.
Чтобы получить все ярлыки node:
MATCH (n) RETURN distinct labels(n)
Чтобы получить счетчик node для каждой метки:
MATCH (n) RETURN distinct labels(n), count(*)
Если вам нужны все отдельные ярлыки (а не комбинации), вы всегда можете расширить ответы:
MATCH (n)
WITH DISTINCT labels(n) AS labels
UNWIND labels AS label
RETURN DISTINCT label
ORDER BY label
START n=node(*) RETURN labels(n)
Если вы используете Java API, вы можете быстро получить итератор всего Label
в базе данных следующим образом:
GraphDatabaseService db = (new GraphDatabaseFactory()).newEmbeddedDatabase(pathToDatabase);
ResourceIterable<Label> labs = GlobalGraphOperations.at(db).getAllLabels();
Если вы хотите получить метки для указания node, используйте labels(node)
; Если вы хотите получить все метки node в neo4j, вместо этого используйте эту функцию: call db.labels;
, никогда не используйте этот запрос: MATCH n RETURN DISTINCT LABELS(n)
. Он выполнит полное сканирование таблицы, которое очень медленно.
Neo4j 3.0 внедрил процедуру db.labels()
witch вернуть все доступные метки в базу данных. Использование:
call db.labels();