2
votes

I would like to modify the way Cypher processes queries sent to it for pattern matching. I have read about Execution plans and how Cypher chooses the best plan with the least number of operations and all. This is pretty good. However I am looking into implementing a Similarity Search feature that allows you to specify a Query graph that would be matched if not exact, close (similar). I have seen a few examples of this in theory. I would like to implement something of this sort for Neo4j. Which I am guessing would require a change in how the Query Engine deals with queries sent to it. Or Worse :)

Here are some links that demonstrate the idea

http://www.cs.cmu.edu/~dchau/graphite/graphite.pdf http://www.cidrdb.org/cidr2013/Papers/CIDR13_Paper72.pdf

I am looking for ideas. Anything at all in relation to the topic would be helpful. Thanks in advance

(:I)<-[:NEEDING_HELP_FROM]-(:YOU)

1
and what is your question? - Stefan Armbruster
What do I need to build something like this for neo4j? - iongraphix
Of course you can fork Neo4j on github and make your modifications to Cypher directly there - however this requires a lot of knowledge on the internal structures. I guess you're better off following @MicTech's advice below. - Stefan Armbruster
If you would agree with me, neo4j doesn't support similarity searches at the moment. I would like to hear your views - iongraphix
The only "non-exactness" in Cypher currently are OPTIONAL MATCH and variable path length matches, e.g. (a)-[:REL*1..3]->(b). - Stefan Armbruster

1 Answers

3
votes

From my point of view, better for you is to create Unmanaged Extensions.

Because you can create you own custom functionality into Neo4j server.

You are not able to extend Cypher Language without your own fork of source code.