Почему Gremlin idx возвращает значение NULL, хотя БД не пуста? - PullRequest
1 голос
/ 21 января 2012

Я открываю график, используя:

g = new Neo4jGraph('...path...');

, затем добавляю вершину, используя:

myVertex = g.addVertex(['type':'X', 'Y':Z]);

Я могу видеть, что БД впоследствии имеет одну вершину (используя Gephi), но когдаЯ бегу:

if (g.idx(T.v) != null )

всегда возвращает false.Нужно ли как-нибудь включить индексацию?Требуется ли Gremlin конкретная версия Neo4j?

Добавление некоторой информации журнала:

...
==>v[22092]
==>v[22093]
==>v[22094]
==>v[22095]
gremlin> g.idx(T.v)
==>null
gremlin> g.idx("vertices")
==>null
gremlin> g.indices
gremlin>

Попробовал это в Gremlin 1.3 - те же результаты.Так что я думаю, это то, чего мне не хватает.

Ответы [ 2 ]

2 голосов
/ 23 января 2012

Я думаю, что создание индексов в Neo4j с Gremlin может быть нарушено.Доказательства включают проблемы, поднятые против neo4j , чертежей и плагина REST .Даже если это не так, у Gremlin на самом деле нет первоклассного доступа к индексам в Neo4j - например, он не может создавать полнотекстовые индексы в прошлый раз, когда я проверял.Не уверен, что это может даже создать индексы отношений в Neo.

Я использую фрагмент Gremlin / Groovy , найденный в документах Neo4j

neo4j = g.getRawGraph()
idxManager = neo4j.index()
personIndex = idxManager.forNodes('vertices')

Я понимаю, что это нарушаетхороший уровень абстракции, который называется Gremlin, но после этого вы можете продолжать свой день, используя методы Gremlin, такие как g.idx('vertices').

EDIT:

Чтобы перейти к индексу до того, как изменение индекса станет "видимым"для Гремлин, попробуйте это:

import com.tinkerpop.blueprints.pgm.impls.neo4j.Neo4jIndex;
ind = new Neo4jIndex('vertices', Vertex.class, g)

Преимущество, которое это имеет по сравнению с сущностью, которую я связал в комментариях, состоит в том, что ind - это индекс Гремлина, и он может вдвое меньше, чем обычная обработка Гремлин.OTOH, суть в комментариях имеет полный доступ к необработанному индексу.

0 голосов
/ 09 апреля 2012

Как создать индекс Neo4j с помощью Gremlin в веб-консоли Neo4j:

gremlin> g.createManualIndex('test2', Vertex.class)
==> MANUAL[test2:Vertex]
gremlin> test2=g.idx('test2')
==> MANUAL[test2:Vertex]
gremlin> hendy=g.v(1673)
==> v[1673]
gremlin> hendy.name
==> Hendy Irawan
gremlin> test2.put('name', 'Hendy Irawan', hendy)
==>
gremlin> test2.get('name', 'Hendy Irawan')
==> v[1673]

Примечание: g.createAutomaticIndex() не будет делать то, что большинство людей ожидают здесь, он создаст ручной индекс Neo4j, которыйавтоматически обновляется Blueprints для индексации ВСЕХ УЗЛОВ (т.е. Vertex класс) со свойством name.

Взят из: https://github.com/neo4j/community/issues/397#issuecomment-5024341

Ссылка: https://github.com/tinkerpop/blueprints/wiki/Graph-Indices

...