Neo4j Node Linking - PullRequest
       3

Neo4j Node Linking

0 голосов
/ 02 декабря 2011

Здравствуйте, я пытаюсь создать простую базу данных neo4j. У меня есть цикл for, который создает новый узел для каждого файла в каталоге

for(file f : files){
        Node document = graphDb.createNode();
        document.setProperty( "name", f.toString().trim());
        graphDb.getReferenceNode().createRelationshipTo(document, MatrixRelationshipTypes.REFRENCE);

это прекрасно работает. Затем я пытаюсь создать узел для каждого имени, найденного в файле:

                Node pName = graphDb.createNode();
                pName.setProperty("name", name.toString());
                pName.createRelationshipTo(document, MatrixRelationshipTypes.CONTAINS_NAME);

Проблема в том, что он создает узел для каждого найденного имени, и я понимаю, что мой код говорит ему об этом. Что я действительно хочу, так это создать узел, если его имя еще не существует. И если одно из названий существует, свяжите его с обоими документами, в которых оно существует.

Есть идеи ??

1 Ответ

1 голос
/ 03 декабря 2011

Вы хотите использовать index . Есть также автоиндексы , которые обрабатывают индексацию (для вас в конце транзакции).

Index<Node> nameIndex = graphDb.index().forNodes("names");

public Node getOrCreateNode(String name) {
  Node found = nameIndex.get("name",name).getSingle();
  if (found!=null) return found;
  Node nameNode = graphDb.createNode();
  nameNode.setProperty("name",name);
  nameIndex.add(nameNode, "name", name);
  return nameNode;
}

Затем вы также можете запросить индекс для узлов, используя подстановочные знаки (синтаксис поиска Lucene).

IndexHits<Node> nodes = nameIndex.query("name:Jo*");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...