Специальные символы, используемые с START в neo4j с Cypher Query - PullRequest
0 голосов
/ 17 июня 2019
START node=node:TEST_INDEX('*:*') 
WHERE node.nodeName =~ '" + nodeName + "' 
RETURN node.nodeName as nodeName

В этом конкретном запросе, что означает : ?

Я заменил этот запрос на

MATCH(node:TESTDATA) 
WHERE node.nodeName =~  '(?i)CXH.*'
RETURN node.nodeName as nodeName

Но возвращаемый результат совершенно другой, он должен возвращать тот же результат, что и ожидалось.

Ответы [ 2 ]

1 голос
/ 17 июня 2019

Этот запрос ('*: *') означает дать мне все столбцы индекса и все значения индекса.

Ниже взято из документации neo4j ver 3.1, http://we -yun.com / doc / 3.1 / neo4j-developer-manual-3.1-dotnet.pdf

При поиске начальных точек по устаревшим индексам (Узел по запросу индекса)

Когда начальная точка может быть найдена с помощью более сложных запросов Lucene, это синтаксис для использования: узел: индекс-имя («запрос»). Это позволяет вам написать более сложные запросы индекса.

Запрос

START n = node:nodes("name:A")
RETURN n

Узел, проиндексированный с именем «A», возвращается запросом.

Result
+-------------------+
| n                 |
+-------------------+
| Node[0]{name:"A"} |
+-------------------+
1 row
0 голосов
/ 17 июня 2019

Это должно сделать то же самое.

MATCH(node:TESTDATA) 
WHERE node.nodeName = $nodeName
RETURN node.nodeName as nodeName

Поиск индекса START в вашем первом запросе просто говорит: «Дайте мне все из этого индекса, который у вас есть с меткой TESTDATA.

На самом деле он не использовал индекс для поиска, который не является умным.

Если вы сейчас создадите индекс для: TESTDATA (nodeName), он будет использовать его в запросе, поэтому ваш запрос будет выполняться намного быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...