https://github.com/thinkaurelius/titan/wiki
"Titan is a distributed graph database<http://en.wikipedia.org/wiki/Graph_database> optimized for storing and querying graphs<http://en.wikipedia.org/wiki/Graph_(mathematics)> represented over a cluster of machines. The cluster can elastically scale to support a growing dataset and user base. Titan has a pluggable storage architecture which allows it to build on proven database technology such as Apache Cassandra <http://cassandra.apache.org/>, Apache HBase<http://hbase.apache.org/>, or Oracle BerkeleyDB<http://www.oracle.com/technetwork/database/berkeleydb/>. Furthermore, the pluggable indexing architecture supports ElasticSearch<http://elasticsearch.com/> and Lucene <http://lucene.apache.org/>." I did some basic research for ES + graph and found the Titan project interesting. Titan separates storage from indexing and only currently supports ES for the latter. I'm sure that you could implement a storage engine based on ES too (which makes more sense now that ES 1.x supports backup/restore). Didn't look into security at all but this might be a good starting point. Hope it's helpful. --Mike On Wed, Mar 5, 2014 at 12:10 PM, Jeff Kunkle <[email protected]> wrote: > I've been trying to figure out how I can index a graph data structure > using ElasticSearch and could really use some advice from someone more > knowledgeable than me. First, let me explain the challenge. The graph model > has individual access controls at the vertex (node), edge (relationship), > and property level. I'd like my users to be able to search the graph for > vertices or edges containing matching properties, with two caveats: > > 1. They should not get vertex or edge results they don't have > permission to see. > 2. Properties a user does not have access to see should not be > evaluated in the query. > > My first thought was to index properties as either nested or child > documents of a vertex/edge and use a custom filter to remove properties a > user didn't have access to. The first problem I run into is when I try a > boolean query across properties. For example, assume I want to query a > person vertex by first name and date of birth. Since these properties are > indexed as separate documents there is never a match. > > What I essentially need is the ability to query across nested or child > documents and return the parent only when there are matches across the > child documents. For example, assume a parent vertex with one property > document called "full_name" set to Barak Obama and another property > document named "political_party" set to Democrat. Is there any way for me > to query for the parent document of these two properties by asking for one > property with full_name="Barak Obama" and another property with > political_party="Democrat"? > > -- > You received this message because you are subscribed to the Google Groups > "elasticsearch" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/elasticsearch/a8beee5b-82d0-45fa-8666-31e956c03439%40googlegroups.com<https://groups.google.com/d/msgid/elasticsearch/a8beee5b-82d0-45fa-8666-31e956c03439%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/groups/opt_out. > -- You received this message because you are subscribed to the Google Groups "elasticsearch" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/CAP8axnAv7D3Ux4jXuPiYS9ZSBGSXSxiR0Qg3C3FzcVHoRZXgiw%40mail.gmail.com. For more options, visit https://groups.google.com/groups/opt_out.
