As the author of the Grails Neo4j plugin, I can give a qualified answer here. The subtree structure currently used in the plugin is not always the best approach. I have plans to replace this by indexing in a custom way, but right now there is no ETA. Since you may need a shorter-term solution, I suggest choosing between 1) and 2) in the case of a read-only database. One of the main advantages of using domain classes is the use of forests. As you are only reading, this argument is not considered IMHO here.
1) has another nice advantage: if you use, for example, cypher to request a graph, the performance will be very good even when using a REST-style database. In general, if performance is important, you should use cypher in favor of querying Grails criteria / dynamic crawlers.
2) If you are going with this approach, I can provide some support. Basically you need to create your domain classes and create a subsequence node for each domain class and associate all instances with this. The advantage here: you can use, for example. dynamic crawlers or standard query criteria. Creating subreference nodes and connections to node instances could be easily accomplished with one or two cypher statements.
source share