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
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to