Cypher Query не находит узел

Я создал встроенный Neo4J в проекте Java следующим образом:

graphDb = new GraphDatabaseFactory()
            .newEmbeddedDatabaseBuilder("db")
            .setConfig(GraphDatabaseSettings.node_keys_indexable, "movieId, userId, rating, genre")
            .setConfig(GraphDatabaseSettings.node_auto_indexing, "true")
            .newGraphDatabase();

Я проверил, что индекс создан и имеет ожидаемое имя:

Index<Node> index = graphDb.index().forNodes("movieId");
System.out.println("::: Verify Index Name :::");
System.out.println(index.getName());

Консоль показывает:

::: Verify Index Name :::
movieId

Я могу найти узел с помощью Java API

ReadableIndex<Node> graphDbIndex = graphDb.index().getNodeAutoIndexer().getAutoIndex();
Node movie = graphDbIndex.get("movieId", 2).getSingle();
System.out.println("::: Get with Java API Result :::");
System.out.println("MovieId: " + movie.getProperty("movieId"));
System.out.println("Title: " + movie.getProperty("title"))

Консоль показывает

::: Get with Java API Result :::
MovieId: 2
Title: Jumanji (1995)

Но когда я пытаюсь с Сайфером, это результат

ExecutionEngine engine = new ExecutionEngine(graphDb);
ExecutionResult result = engine.execute("start movie=node:movieId(movieId='2') return movie, movie.title");
System.out.println("::: get with Cypher Result :::");
System.out.println(result);

Консоль показывает

::: get with Cypher Result :::
+---------------------+
| movie | movie.title |
+---------------------+
+---------------------+
0 row
8 ms

Я делаю что-то очень неправильно или я просто пропустил что-то очевидное?

Спасибо.


person C0deAttack    schedule 08.03.2013    source источник
comment
Я думаю, вы перепутали имя индекса, которое node_auto_index соответствует именам индексированных свойств "movieId, userId, rating, genre".   -  person Michael Hunger    schedule 10.03.2013


Ответы (1)


Является ли идентификатор строкой? Попробуйте так с синтаксисом индекса lucene:

start movie=node:node_auto_index('movieId:2') 
return movie, movie.title
person Eve Freeman    schedule 08.03.2013
comment
Попробовал ваше предложение, но по-прежнему возвращает 0 строк с «movieId: 2». Значения movieId относятся к типу Long. - person C0deAttack; 08.03.2013
comment
О, я видел, что вы используете автоматический индексатор... обновил мой ответ. - person Eve Freeman; 08.03.2013
comment
Ааа! Спасибо, теперь у меня есть ожидаемый результат. Можете ли вы объяснить, почему «movieId: 2» работает, но movieId = «2» неверно? - person C0deAttack; 08.03.2013
comment
Вы можете искать строковые литералы или параметры только с другим синтаксисом, AFAIK. - person Eve Freeman; 08.03.2013