Monday, 7 May 2018

Part 1/2: Graphs are Bloom-ing

Last week something happened that really excited me. We, Neo4j, finally announced Bloom and demonstrated our own Graph Visualisation and Discovery tool, Neo4j Bloom. This is a technology that we have long been pondering, have experimented with in a number of ways, and have long looked to find and develop an offering that would be interesting and differentiated in what is already a very well looked-after marketplace. 

I am not exaggerating when I say that is truly exciting. Not only do many of our customers want to be able to visualise the results of their graph queries, but the graph data model is also unique in the way that it provides such an intuitive, easy to understand data model that lends itself so well to a GRAPH-ical representation. It truly fits into the Graph Platform vision that Neo4j has been advocating since 2017.
All sounds great. But how does it work? How can I use it? As you may have already learned from this blog, I am someone who loves to touch and feel the product, so I convinced my colleagues to allow me to play around with Bloom. So here's that story.

Connecting to the Belgian BeerGraph

I have written about one of my favourite topics, Belgian Beer, a number of times already. It's a super easy dataset, interesting, connected, and allows for pretty easy explanations of graph concepts while thinking of lovely beers - what's not to like! I you want to load it into your own Neo4j instance, then please take a look at this graphgist. For this post, I am going to assume that you have that already - and connect my Bloom toolset to it.

Once you have access to Bloom (reach out to us if you think you need it before the release date of June 2018), you immediately get connected to your Neo4j instance, and Bloom asks you to help you out from the get-go.

It wants to "generate a perspective" for me. This is essentially a specific viewpoint onto my data that allows me to explore it in a specific way. More about that later. To create the viewpoint, Bloom looks into the Neo4j instance, looks at the schema, indexes and statistics, and proposes to create a specific starting point for the exploration. You can see that below.

As you can see, it has found my key data types (Neo4j Labels) in the BeerGraph, and has assigned default colours and captions to it.

Exploring the BeerGraph with Bloom

Now, my canvas - the graph exploration area and main working screen - is ready, and Bloom is inviting me to try out a first discovery query. Note that it's different from the Neo4j browser: I am not supposed to type Cypher here - I am supposed to "near-natural language" querying that is very intuitive and relevant to my domain.

So of course I would start by looking for my favourite beer, Orval.
Bloom shows me the result (1 isolated node), and so I decide to do it again and look for Duvel - another excellent beer that I still like. When I then right-click I immediately see some options.
And if I choose the "Shortest Path" option it immediately allows me to look at the connections between Duvel and Orval - something that we will get back to later.
I can also just choose to expand one of the nodes. Note that I can do that with the command+E function key as well - super convenient and quick. I am actually really impressed with the usability of Bloom - it's super well thought-out.
 So here's my Orval "neighborhood".
And now we can start to use some more advanced querying - because that's how graphs and graph discovery work usually: a question begets a question, etc etc... exploration connects to exploration... and you gradually find out more and more interesting topics in your domain.

As you can see below, as I start typing into the search bar, Bloom as actually doing some very interesting stuff. It tries to understand what I am looking for: is it a full-text-search style query (where it will use the Neo4j indexes to find out the most relevant results), or are you actually looking for a pattern. Here I am typing

"Beerbrands of trappist" and what it actually does it starts looking for other nodes that have the label (:BeerBrand) that are connected to the (:BeerType {name:"trappist"}) node that is already on the canvas.
When I hit return, I get the other trappists onto the canvas.
 And I can explore some more: let's add the (:AlcoholPercentage) nodes to this pattern:
 And so on. It's super intuitive and well done - I like it a lot.
Obviously this is only a tiny little part of what Bloom can do. In the next part of this blogpost, we'll look at how we can extend this "near-natural language" querying ourselves, with some very sophisticated parametrised Cypher skills.

Hope this was useful for you - please let me know if you have any feedback.

Cheers

Rik

No comments:

Post a comment