Archive for the ‘Cypher’ Category

AnormCypher 0.4.1 released!

Sunday, May 19th, 2013

AnormCypher 0.4.1 released! by Wes Freeman.

From the post:

Thanks to Pieter, AnormCypher 0.4.1 supports versions earlier than Neo4j 1.9 (I didn’t realize this was an issue).

AnormCypher is a Cypher-oriented Scala library for Neo4j Server (REST). The goal is to provide a great API for calling arbitrary Cypher and parsing out results, with an API inspired by Anorm from the Play! Framework.

If you are working with a Neo4j Server this may be of interest.

Labels and Schema Indexes in Neo4j

Tuesday, May 14th, 2013

Labels and Schema Indexes in Neo4j by Tareq Abedrabbo.

From the post:

Neo4j recently introduced the concept of labels and their sidekick, schema indexes. Labels are a way of attaching one or more simple types to nodes (and relationships), while schema indexes allow to automatically index labelled nodes by one or more of their properties. Those indexes are then implicitly used by Cypher as secondary indexes and to infer the starting point(s) of a query.

I would like to shed some light in this blog post on how these new constructs work together. Some details will be inevitably specific to the current version of Neo4j and might change in the future but I still think it’s an interesting exercise.

Before we start though I need to populate the graph with some data. I’m more into cartoon for toddlers than second-rate sci-fi and therefore Peppa Pig shall be my universe.

So let’s create some labeled graph resources.

Nice review of the impact of the new label + schema index features in Neo4j.

I am still wondering why Neo4j “simple types” cannot be added to nodes and edges without the additional machinery of labels?

Allow users to declare properties to be indexed and used by Cypher for queries.

Which creates a generalized mechanism that requires no changes to the data model.

I have a question pending with the Neo4j team on this issue and will report back with their response.

Cypher: It doesn’t all start with the START (in Neo4j 2.0!) [Benchmarks?]

Saturday, April 13th, 2013

Cypher: It doesn’t all start with the START (in Neo4j 2.0!)

From the post:

So, apparently, the Neo Technology guys read one of my last blog posts titled “It all starts with the START” and wanted to make a liar out of me. Actually, I’m quite certain it had nothing at all to do with that–they are just wanting to improve Cypher to make it the best graph query language out there. But yes, the START clause is now optional. “How do I tell Neo4j where to start my traversals”, you might ask. Well, in the long run, you won’t need to anymore. Neo4j will keep index and node/rel statistics and know which index to use, and know which start points to use to make the match and where the most efficient query based on its cost optimization. It’s not quite there yet, so for a while we’ll probably want to make generous use of “index hints”, but I love the direction this is going–feels just like the good old SQL.

While you are looking at Neo4j 2.0, remember the performance benchmarks by René Pickhardt up through Neo4j 1.9:

Get the full neo4j power by using the Core Java API for traversing your Graph data base instead of Cypher Query Language

As of Neo4j 1.7, the core Java API was a full order of magnitude faster than Cypher and up to Neo4j 1.9, the difference was even greater.

Has anyone run the benchmark against Neo4j 2.0?

Cypher in Neo4j 2.0

Sunday, March 24th, 2013

Cypher in Neo4j 2.0

Previews new features in Neo4j.

Labels & Indexing

Labels group nodes into sets. Nodes can have multiple labels.

Can use labels to create indexes on subsets of nodes.

Labels will support schema constraints (future feature).

I first saw this in a tweet by Michael Lappe.

Matching Traversal Patterns with MATCH

Sunday, March 17th, 2013

Cypher basics: Matching Traversal Patterns with MATCH by Wes Freeman.

From the post:

“Because friends don’t let friends write atrocious recursive joins in SQL.” -Max De Marzi

The match clause is one of the first things you learn with Cypher. Once you’ve figured out how to look up your starting bound identifiers with start, you usually (but not always) want to match a traversal pattern, which is one of Cypher’s most compelling features.

The goal of this post is not to go over the syntax for all of the different cases in match–for that the docs do a good job: Cypher MATCH docs. Rather, I hoped to explain more the how of how match works.

First, you need to understand the difference between bound and unbound identifiers (sometimes we call them variables, too, in case I slip up and forget to be consistent). Bound identifiers are the ones that you know the value(s) of–usually you set these in the start clause, but sometimes they’re passed through with with. Unbound identifiers are the ones you don’t know the values of: the part of the pattern you’re matching. If you don’t specify an identifier, and instead just do a-->(), or something of that sort, an implicit unbound identifier is created for you behind the scenes, so Cypher can keep track of the values it’s found. The goal of the match clause is to find real nodes and relationships that match the pattern specified (find the unbound identifiers), based on the bound identifiers you have from the start.

Wes is creating enough of these mini-tutorials that you will find his Cypher page, a welcome collection point.

Cypher basics: it all starts with the START

Saturday, March 16th, 2013

Cypher basics: it all starts with the START by Wes Freeman.

From the post:

“It all starts with the START” -Michael Hunger, Cypher webinar, Sep 2012

The start clause is one of those things that seems quite simple initially. You specify your start point(s) for the rest of the query. Typically, you use an index lookup, or if you’re just messing around, a node id (or list of node ids). This sets the stage for you to match a traversal pattern, or just filter your nodes with a where. Let’s start with a simple example–here we’re going to find a single node, and return it (later we’ll get into why start is sort of like a SQL from):

Wes continues his excellent introduction to Cypher.

Cypher for SQL Professionals

Friday, March 15th, 2013

Cypher for SQL Professionals by Michael Hunger. (video)

From the webpage:

Cypher is a graph query language used in Neo4j. Much like SQL, it’s a declarative language used for querying databases.

What does a join look like in Cypher? What about an left outer join? There are a lot of similarities between the two, Cypher is heavily influenced by SQL. We’ll talk about what these common concepts and differences are, what Cypher gives you that SQL leaves you wanting. Come along and see how Neo4j and Cypher can make your daily grind much easier and more fun.

You’ll learn how to use your current SQL knowledge to quickly get started using Neo4j and Cypher.

Just in case you get to pick the video for this weekend. ;-)

This is work friendly so you might better save it for a lunch break next week.

The Mythical WITH (Neo4j’s Cypher query language)

Tuesday, March 12th, 2013

The Mythical WITH (Neo4j’s Cypher query language) by Wes Freeman.

From the post:

Coming from SQL, I found Cypher a quick learn. The match was new, and patterns were new, but everything else seemed to fit well with SQL concepts. Except with, the way to build a sort of sub-query–it seemed hard to wrap my head around. So, what really happens behind the scenes with a with clause in your query? How does it work? It turns out, almost any complex query ends up needing a with in it, but let’s start with a simple example.

After reading this post, you will be waiting for part 2!

Very good introduction to with in Cypher!

BTW, as an added bonus, Wes blogs about chess as well.

Neo4j 1.9.M05 released – wrapping up

Thursday, March 7th, 2013

Neo4j 1.9.M05 released – wrapping up by Peter Neubauer.

From the post:

We are very proud to announce the next milestone of the Neo4j 1.9 release cycle. This time, we have been trying to introduce as few big changes as possible and instead concentrate on things that make the production environment a more pleasant experience. That means Monitoring, Cypher profiling, Java7 and High Availability were the targets for this work.

Everyone likes improvements, new features, etc.

I am leaning towards profiling cypher statements as my favorite in this release.

What’s yours?

“Do Bees” / “Don’t Bees” and Neo4j

Tuesday, March 5th, 2013

According to Michael Hunger in a Neo4j Google Groups message, the Neo4j team is drowning in its own success!

Now there’s a problem to have!

“Do Bees” for Neo4j will:

…ask questions on Stack Overflow that related to:

Please tag your questions with “neo4j” and “cypher”, “gremlin” or “spring data neo4j” accordingly. See the current list:

http://stackoverflow.com/questions/tagged/neo4j

Currently questions on SO are answered quickly by a group of very active people which we hope you will join. We try to chime in as often as possible (especially with unanswered questions).

So PLEASE post your questions there on Stack Overflow, we will start asking individuals to move their questions to that platform and if they don’t manage it, move them ourselves.

We will also monitor this badge: http://stackoverflow.com/badges/1785/neo4j and award cool stuff for people that make it there.

This google group shall return to its initial goals of having broader discussions about graph topics, modeling, architectures, roadmap, announcements, cypher evolution, open source etc. So we would love everyone who has questions or problems in these areas to reach out and start a conversation.

Hope for your understanding to make more breathing room in this group and more interesting discussions in the future while keeping an interactive FAQ around Neo4j going on SO with quick feedback loops and turnaround times.

The Neo4j community will be healthier if we are all “Do Bees” so I won’t cover the alternative.

If you don’t know “Do Bees” / “Don’t Bees,” see: Romper Room.

See you at Stackoverflow!

neo4j/cypher: Combining COUNT and COLLECT in one query

Tuesday, February 26th, 2013

neo4j/cypher: Combining COUNT and COLLECT in one query by Mark Needham.

From the post:

In my continued playing around with football data I wanted to write a cypher query against neo4j which would show me which teams had missed the most penalties this season and who missed them.

Mark discovers queries with two aggregation expressions have problems but goes on to solve it as well.

Facebook Graph Search with Cypher and Neo4j

Thursday, January 31st, 2013

Facebook Ggraph Search with Cypher and Neo4j by Max De Marzi.

From the post:

Facebook Graph Search has given the Graph Database community a simpler way to explain what it is we do and why it matters. I wanted to drive the point home by building a proof of concept of how you could do this with Neo4j. However, I don’t have six months or much experience with NLP (natural language processing). What I do have is Cypher. Cypher is Neo4j’s graph language and it makes it easy to express what we are looking for in the graph. I needed a way to take “natural language” and create Cypher from it. This was going to be a problem.

If you think about “likes” as an association type with role players….

Of course, “like” paints with a broad brush but it is a place to start.

Neo4j 1.8.1 – Stability and (Cypher) Performance

Wednesday, December 26th, 2012

Neo4j 1.8.1 – Stability and (Cypher) Performance by Michael Hunger.

A maintenance release for the Neo4j 1.8.* line.

Michael writes:

In particular, Cypher has been extended with support for the new Bidirectional Traverser Framework, meaning query times are in some cases cut down to a third of what they used to be. Also, Andres spent time optimizing memory consumption, so you can run more and larger Cypher queries faster than ever before!

We got started on extending JVM and Java version support by eliminating compilation issues for Java 7 on both Oracle JVM and OpenJDK – a good first step. We still have some way to go, notably rigorous testing as part of our continuous integration pipeline, and community feedback – this is where you come in. We have had some confusion over this, so we have now inserted checks and warnings that state clearly: we currently only support JDK 6.

For our enterprise customers we have added a new consistency checker that both runs faster and catches more problems, to ensure your backups are always in a good state. And we straightened out some behaviours in our HA protocol around cluster formation that were confusing.

Neo4j 1.8.1 (download)

Intro to Cypher Console [Live Party Friend of Friend Graph?]

Friday, December 21st, 2012

Intro to Cypher Console by Peter Neubauer.

Peter has posted a 5 minute video introduction to the Cypher console.

Imagine a dynamic a friend of a friend graph for a Christmas or New Year’s party. Updated every 5 minutes and projected on a big screen.

Or you could allow guests to attach comments to the nodes/edges.

Rife with opportunities for humor. ;-)

Full power to the Neo4j engines, Mr. Scott!

Tuesday, November 6th, 2012

René’s title: “Get the full neo4j power by using the Core Java API for traversing your Graph data base instead of Cypher Query Language“, makes you appreciate why René’s day job is “computer scientist” and not “ad copy writer.” ;-)

René compares working with Neo4j via:

  • Java Core API
  • Traverser Framework
  • Cypher Query Language

And that is the order of their performance, from fastest to slowest:

  • Java Core API – Order of magnitude faster than Cypher
  • Traverser Framework – 25% slower than Java Core
  • Cypher Query Language – Slowest

Order of magnitude improvements tend to attract the attention of commercial customers and those with non-trivial data sets.

That is if you need performance today, not someday.

Tips and Tricks for Cypher

Sunday, October 28th, 2012

some tips and tricks for mutable Cypher by Aseem Kishore.

Aseem has a nice post on mutable Cypher and issues he has encountered.

Will save you time solving the same problems.

Neo4j 1.9.M01 – Self-managed HA

Friday, October 26th, 2012

Neo4j 1.9.M01 – Self-managed HA by Peter Neubauer.

Welcome everyone to the first Milestone of the Neo4j 1.9 releases! In this release we’re presenting our new HA solution and a set of excellent improvements to our query language, Cypher.

Peter hits the highlights of the first milestone release for Neo4j 1.9.

I suggest you grab the software first and read Peter’s summary while you “play along.” ;-)

Cheat Sheet: Cypher Query Language for Graph Databases [Marketing Question]

Saturday, October 20th, 2012

Cheat Sheet: Cypher Query Language for Graph Databases

Cypher is the declarative query language for the Neo4j graph database. Download this cheat sheet to get quickly up to speed on querying graphs and to learn how Cypher:

  • Matches patterns of nodes and relationship in the graph, to extract information or modify the data.
  • Has the concept of identifiers which denote named, bound elements and parameters.
  • Can mutate graph data by creating, updating, and removing nodes, relationships, and properties.

A very good “cheat sheet.”

Up to you to decide if giving up your phone number is worth it for a free cheat sheet.

People get pissed off over passive tracking.

How will they react to overreaching marketing departments collecting phone numbers and addresses?

Something to keep in mind when designing your marketing efforts.

Newsfeed feature powered by Neo4j Graph Database

Tuesday, October 16th, 2012

Newsfeed feature powered by Neo4j Graph Database

From the post:

Implementation of newsfeed or timeline feature became a must requirement for every social application. Achieving the same result through traditional relational databases would have been cumbersome as well as inefficient due to number of joins in SQL query. Would post an another article on why graph databases especially NEO4J is an apt choice for social application. For now, this post would directly jump into the implementation of simple newsfeed feature using powerful graph database NEO4J. (This article assumes that reader already understands basic concepts of graph databases representation, Neo4j and Cypher query language).

Neo4j Documentation has already given us the data model to represent social network in graph database and queries to retrieve data. Instead of repeating the whole story, this post would compliment the existing doc by giving cypher queries to create and retrieve data for below data model.

Would be Facebook killers will appreciate the example but tying Neo4j to a standard news feed would be more useful.

Follow The Data – FEC Campaign Data Challenge

Saturday, October 6th, 2012

Follow The Data – FEC Campaign Data Challenge by Andreas Kollegger.

Take the challenge and you may win a pass to Graph Connect, November 5 & 6 in San Francisco. (Closes 11 October 2012.)

In politics, people are often advised to “follow the money” to understand the forces influencing decisions. As engineers, we know we can do that and more by following the data.

Inspired by some innovative work by Dave Fauth, a Washington DC data analyst, we arranged a workshop to use FEC Campaign data that had been imported into Neo4j.

….

With the data imported, and a basic understanding of the domain model, we then challenged people to write Cypher queries to answer the following questions:

  1. All presidential candidates for 2012
  2. Most mythical presidential candidate
  3. Top 10 Presidential candidates according to number of campaign committees
  4. Find President Barack Obama
  5. Lookup Obama by his candidate ID
  6. Find Presidential Candidate Mitt Romney
  7. Lookup Romney by his candidate ID
  8. Find the shortest path of funding between Obama and Romney
  9. List the 10 top individual contributions to Obama
  10. List the 10 top individual contributions to Romney

Pointers to data, hints await at Andreas’ post.

Neo4j 1.8 Release – Fluent Graph Literacy

Tuesday, October 2nd, 2012

Neo4j 1.8 Release – Fluent Graph Literacy by Andreas Kollegger.

From the post:

Available immediately, Neo4j 1.8 offers a delightful experience for reading and writing graph data with the simple expressiveness of the Cypher language. Whether you’re just discovering the social power of Facebook’s Open Graph or are building your own Knowledge Graph for Master Data Management, speaking in graph is easy with Cypher. It is the key to making sense of data with Neo4j.

Another major milestone in Neo4j development!

Cypher Query Language and Neo4j (webinar)

Wednesday, September 26th, 2012

Cypher Query Language and Neo4j (Registration page)

Thursday, Sept 27, 2012
10:00 PDT // 19:00 CEST

From the description:

The Neo4j graph database is all about relationships. It allows to model domains of connected data easily. Querying using a imperative API is cumbersome and bloated. So the Neo Technology team decided to develop a query language more suited to query graph data. Join us to learn the journey of its inception to a being usable tool.

Curious, has anyone compared Cypher to other graph query languages?

Neo4j 1.8.RC1 – Really Careful #ftw

Friday, September 7th, 2012

Neo4j 1.8.RC1 – Really Careful #ftw

From the post:

As we prepare the Neo4j 1.8 series for General Availability, we’re moving to an RC model of finalizing production ready software. RC of course stands for Really Careful.

Resisting Changes

Every line of code that is committed to github is greeted with exhaustive continuous testing, earning the developer either a deep-fried twinkie or pickled herring – the reward/punishment is flipped depending on the resident country.

For milestone releases, great care is used to QA the packaged artifacts. Download, install, start/stop, go through the motions of normal use, throw sample applications against it, compare benchmarks, try out language bindings. Yet, we haven’t been entirely comfortable going directly from a milestone to general availability, because the milestone often will have introduced new features and possible breaking changes.

Now, we’re adopting a formal Release Candidate strategy: a feature complete release built from a frozen code base which will only accept bug fixes. An RC could be the GA, but introduces a longer public review before getting the final stamp of approval.

Do you have your copy yet?

Neo4j-[:LOVES]->Cypher

Saturday, September 1st, 2012

Neo4j-[:LOVES]->Cypher

Followup to Michael Hunger’s presentation (30 August 2012) on Neo4j and Cypher.

Slides and video have been posted, plus answers to posted questions.

Neo4j 1.8.M07 – Sharing is Caring

Monday, August 13th, 2012

Neo4j 1.8.M07 – Sharing is Caring

Neo4j 1.8.M07 announcement with a couple of the highlights.

Available immediately, Neo4j 1.8 Milestone 7 sets the stage for responsible data sharing. We’re open source. Naturally we’re mindful about supporting…

Open (Meta) Data

Way back when Neo4j 1.2.M01 was released we introduced the Usage Data Collector (UDC), an optional component which would help us understand how running instance of Neo4j were being used, by reporting back anonymous context information: operating system, runtime, region of the Earth, that kind of thing.

Of course, the source code for the UDC is open and available for inspection. Now, we’re taking some steps to make the meta-data itself available, to make that data useful for everyone in the community, and to do so while being uber sensitive to the slightest hint of privacy concerns.

We’re kinda excited about this, actually. Stay tuned to learn more about what we’re doing, how you can be involved, and how it will be awesome for the community.

Create Unique Data

Earlier in the 1.8 branch, we introduced the RELATE clause, a powerful blend of MATCH and CREATE. With it, you could insist that a pattern of data should exist in the graph, and RELATE would perform the least creations required to uniquely satisfy the pattern.

In discussion, we kept saying things like “uniquely creates” to describe it, finally realizing that we should name the thing with the much more obvious CREATE UNIQUE.

Don’t be the last one on your block to have the latest Neo4j release!

Cypher Query Language and Neo4j [Webinar]

Tuesday, July 31st, 2012

Cypher Query Language and Neo4j [Webinar]

Thursday August 30 10:00 PDT / 19:00 CEST

From the registration page:

The Neo4j graph database is all about relationships. It allows to model domains of connected data easily. Querying using a imperative API is cumbersome and bloated. So the Neo Technology team decided to develop a query language more suited to query graph data.

Taking inspiration from SQL, SparQL and others and using Scala to implement it turned out to be a good decision. The parser-combinator library, functional composition and lazy evaluation helped us to easily go ahead. Join us to learn the journey of its inception to a being usable tool.

Speaker: Michael Hunger, Community Lead and Head of Spring Integration, Neo Technology.

Take a look at the documentation before the webinar. Look for “Cypher Query Language” in the table of contents.

Neo4j 1.8.M05 – In the Details

Sunday, July 1st, 2012

Neo4j 1.8.M05 – In the Details

A new milestone of Neo4j that merits your attention!

Download a copy today!

Neo4j continues to struggle with documentation issues.

For example, the blog post that announces Neo4j 1.8.M05 reports under Cypher:

  • String literals can now contain some escape characters, like:
    • CREATE (n {text:”single \’ and double \” quotes”});

As a standards editor, I cringe when I see “…some escape characters, like:” What the hell does “…some escape characters…” mean?

I can’t begin to guess.

It gets even worse if you try to find an answer in the documentation.

Using the PDF version, searching for “escape” I found:

16.10.8. Relationship types with uncommon characters

Sometime your database will have types with non-letter characters, or with spaces in them. Use ` to escape these.

and,

16.11.4. Escaping in regular expressions

If you need a forward slash inside of your regular expression, escape it just like you expect to.

And “…just like you expect to.” would be?

The example at that point illustrates using “\” as an escape character, as in “/Some\/thing/.”

and,

19.3.12. Get typed relationships

Note that the “&” needs to be escaped for example when using cURL from the terminal.

Not only bad writing but annoying as well.

Don’t state a problem without the answer or linking to the answer if it is too long to insert in place. BTW, the answer is to write any “&” character as “%26″ (without the quotes).

and,

19.7.5. Add node to index

Associates a node with the given key/value pair in the given index.

Note

Spaces in the URI have to be escaped.

I haven’t gone back to the RFC but I think the correct term here is “encoded” and the encoded character is “%20″ (without the quotes).

19.7.9 Find Node By Exact Match has the same issue. (There is an Asciidoc escape issue reported in 30.3.5 but it is of no relevance to Cypher escape character issue.)

Having searched all the current documentation, I can’t say for sure what escape characters Cypher uses or under what circumstances.

Having a small group of insiders who know the real score is fine for smallish hacker projects. Not so good if you are aspiring to be a viable commercial product.

Neo4j 1.8.M03 – Related Coffee [1st comments on RELATE]

Saturday, May 26th, 2012

Neo4j 1.8.M03 – Related Coffee

From the post:

Released today, Neo4j 1.8.M03 introduces the RELATE clause, a two-step dance of MATCH or CREATE. Also, new Transaction support in the shell let’s you call for a do-over in case you misstep.

The blog entry also points you to the Neo4j Manual entry on Cypher RELATE
.

My main machine is still down so I will have to wait to test the latest release (new equipment arrives on Tuesday of the coming week).

But in the mean time, if you read the manual entry, the first paragraph says:

RELATE is in the middle of MATCH and CREATE – it will match what it can, and create what is missing. RELATE will always make the least change possible to the graph – if it can use parts of the existing graph, it will.

I don’t need a working copy of Neo4j/Cypher to say that “RELATE will always make the least change possible to the graph – if it can use part of the existing graph, it will.” is an odd statement.

How is RELATE going to determine the “…least change possible to the graph…”?

That sounds like a very hard problem.

More comments to follow on RELATE.

Neo4j 1.8.M01 Release – Vindeln Vy

Thursday, May 3rd, 2012

Neo4j 1.8.M01 Release – Vindeln Vy

From the post:

Neo4j 1.8 has an eye for expansive views, painting a picture with data and hanging it on the web. In this first milestone release, artful work on the Cypher query language is complemented with live views in the Neo4j documentation.

Take a few minutes to read the interview with “Lead Cypherologist” (their words, not mine) Andrés Taylor. Sets high expectations for the future of Cypher!

Then jump to the download page!

;-)

Neo4j – Hyperedges and Cypher – Suggested Revisions

Friday, March 30th, 2012

Recently “Hyperedges and Cypher” was cited to illustrate “improvements” to Neo4j documentation. It is deeply problematic.

The first paragraph and header read:

5.1 Hyperedges and Cypher

Imagine a user being part of different groups. A group can have different roles, and a user can be part of different groups. He also can have different roles in different groups apart from the membership. The association of a User, a Group and a Role can be referred to as a HyperEdge. However, it can be easily modeled in a property graph as a node that captures this n-ary relationship, as depicted below in the U1G2R1 node.

This is the first encounter of hyperedge (other than in the table of contents) for the reader. The manual offers no definition for or illustration of a “hyperedge.”

When terms are introduced, they need to be defined.

Here is the Neo4j illustration for the preceding description (from the latest milestone release):

Neo4j-Cypher-HyperEdge

I don’t get that graph from the description in the text.

This graph comes closer:

User-Roles-Group

You may object that role1 and role2 should be nodes rather than an edges, but that is a modeling decision, another area where the Neo4j manual is weak. The reader doesn’t share in that process, nodes and edges suddenly appear and the reader must work out why?

If the current prose were cleaned up, by providing a better prose description, modeling choices and alternatives could be illustrated, along with Cypher queries.

On hypergraphs/hyperedges:

A user having different roles in different groups could be modeled with a hyperedge, but not necessarily so. If Neo4j isn’t going to support hyperedges, why bring it up? Show the modeling that Neo4j does support.

If I were going to discuss hyperedges/hypergraphs at all, I would point out examples of where they are used, along with citations to the literature.