2016-04-08 4 views
2

Я использую neo4j-jdbc 2.3.2 как мой клиент neo4j для java. Когда я выполнил следующий запрос cypher
match(p:Person) where p.id_number='761201948V' return p.id;
он вернет P2547228 в качестве идентификатора узла. Я чувствую, что id такой же, как и другие свойства узла, так как я могу использовать его внутри где клаузулы.

Но здесь я ожидаю целое число, которое может использовать внутри этого запроса START p=node('node.id') return p; Этот идентификатор является внутренней вещью для neo4j db? и есть ли способ получить этот идентификатор?

Из следующих двух Cyphers, что является наиболее эффективным один? (Если оба в виду тот же узел)
Получение точного идентификатора узла в neo4j cypher

  1. START p=node('2547223') return p;
  2. match(p:Person) where p.id='P2547228' return p;

ответ

2

Вы должны использовать функцию ID(x) для этого. Обратите внимание, что ID(x) и x.id - совершенно другая вещь. Первый возвращает внутренний идентификатор узла/отношения, управляемый самим Neo4j. Последнее дает свойство id, которое управляется пользователем, а не самой базой данных.

Также обратите внимание, что идентификатор узла/отношения всегда является числовым.

Использование START довольно много старой школы и не должны больше использоваться (для доступа вручную индексов, за исключением):

start p=node(2547228) return p 

Это один эквивалент заявление. Это очень эффективно, так как это просто необходимо сделать простую операцию поиска в хранилище узла:

match(p:Person) where id(p)=2547228 return p; 

Глядя на свойства требует либо сканирования метки узла или индекс схемы запроса:

match(p:Person) where p.id=2547228 return p; 

Просто просмотрите планы запросов самостоятельно, предварительно указав инструкцию PROFILE.

+0

именно то, что я хочу, большое спасибо ... – Hasitha

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