Hi!
I tried to use graph mather as a simple subgraph finder... unfortunately it
doesn't work the way its supposed to.
1. I create simple graph:
* Node node1 = graphDb.createNode();
node1.setProperty(ID_KEY, 100001);
node1.setProperty(TYPE_KEY, 'E');
Node node2 = graphDb.createNode();
node2.setProperty(ID_KEY, 100002);
node2.setProperty(TYPE_KEY, 'V');
Node node3 = graphDb.createNode();
node3.setProperty(ID_KEY, 100003);
node3.setProperty(TYPE_KEY, 'V');
Node node4 = graphDb.createNode();
node4.setProperty(ID_KEY, 100004);
node4.setProperty(TYPE_KEY, 'E');
Node node5 = graphDb.createNode();
node5.setProperty(ID_KEY, 100005);
node5.setProperty(TYPE_KEY, 'E');
Node node6 = graphDb.createNode();
node6.setProperty(ID_KEY, 100006);
node6.setProperty(TYPE_KEY, 'E');
node1.createRelationshipTo(node2, RelTypes.INVOLVED);
node2.createRelationshipTo(node4, RelTypes.INVOLVED);
node4.createRelationshipTo(node3, RelTypes.INVOLVED);
node3.createRelationshipTo(node1, RelTypes.INVOLVED);
node2.createRelationshipTo(node6, RelTypes.INVOLVED);
node6.createRelationshipTo(node5, RelTypes.INVOLVED);
node5.createRelationshipTo(node4, RelTypes.INVOLVED);*
here <http://shrani.si/f/5/f7/1DKus39y/picture1.jpg>is a picture how it
looks like.
2. Then I create simple pattern graph:
* PatternNode patternNode1 = new PatternNode();
patternNode1.addPropertyConstraint(TYPE_KEY, new
ValueMatcherImpl('E'));
PatternNode patternNode2 = new PatternNode();
patternNode2.addPropertyConstraint(TYPE_KEY, new
ValueMatcherImpl('V'));
PatternNode patternNode3 = new PatternNode();
patternNode3.addPropertyConstraint(TYPE_KEY, new
ValueMatcherImpl('V'));
PatternNode patternNode4 = new PatternNode();
patternNode4.addPropertyConstraint(TYPE_KEY, new
ValueMatcherImpl('E'));
PatternNode patternNode5 = new PatternNode();
patternNode5.addPropertyConstraint(TYPE_KEY, new
ValueMatcherImpl('E'));
PatternNode patternNode6 = new PatternNode();
patternNode6.addPropertyConstraint(TYPE_KEY, new
ValueMatcherImpl('E'));
patternNode1.createRelationshipTo(patternNode2, Direction.BOTH);
patternNode2.createRelationshipTo(patternNode4, Direction.BOTH);
patternNode1.createRelationshipTo(patternNode3, Direction.BOTH);
patternNode3.createRelationshipTo(patternNode4, Direction.BOTH);*
link <http://shrani.si/f/Y/C6/3AUZFjuo/picture2.jpg>to picture.
3. Finally I try to find graph:
* PatternMatcher matcher = PatternMatcher.getMatcher();
Iterable<PatternMatch> matches = matcher.match(patternNode1, node1);
for (PatternMatch match : matches) {
System.out.println("\nFOUND MATCH: ");
for(PatternElement element: match.getElements())
System.out.print(element.getNode().getProperty(TYPE_KEY)+
" - "+element.getNode().getProperty(ID_KEY)+" ");
}*
Starting node is always the leftmost node in pictures.
RESULT:
FOUND MATCH:
E - 100004 E - 100001 V - 100003 V - 100002
FOUND MATCH:
E - 100004 E - 100001 V - 100002 V - 100003
FOUND MATCH:
E - 100004 E - 100006 V - 100002 V - 100003
First 2 results are fine. Second is just automorphism of first. Third
result is totaly wrong.
Is there something I am doing wrong? Will graph-matching ever support*
true*graph matching?
Sorry for bad english.
Have a nice day. :)
_______________________________________________
NOTICE: THIS MAILING LIST IS BEING SWITCHED TO GOOGLE GROUPS, please register
and consider posting at https://groups.google.com/forum/#!forum/neo4j
Neo4j mailing list
[email protected]
https://lists.neo4j.org/mailman/listinfo/user