Some scenarios require query syntax that matches on partial values or broad categories within a string. To do this kind of query, you need some flexibility and options for string matching and searches. Whether you are looking for a string that starts with, ends with, or includes a certain value, Cypher offers the ability to handle it performantly and easily.
There are a few keywords in Cypher used with the WHERE
clause to test string property values.
The STARTS WITH
keyword allows you check the value of a property that begins with the string you specify.
With the CONTAINS
keyword, you can check if a specified string is part of a property value.
The ENDS_WITH
keyword checks the end of the property string for the value you specify.
An example of each is in the Cypher block below.
//check if a property starts with 'M'
MATCH (p:Person)
WHERE p.name STARTS WITH 'M'
RETURN p.name
//check if a property contains 'a'
MATCH (p:Person)
WHERE p.name CONTAINS 'a'
RETURN p.name
//check if a property ends with 'n'
MATCH (p:Person)
WHERE p.name ENDS WITH 'n'
You can also use regular expressions to test the value of strings.
For example, you could look for all the Person
nodes that share a first name or you could find all the classes with a certain department code.
Let’s look at an example.
MATCH (p:Person)
WHERE p.name =~ 'Jo.*'
RETURN p.name
Just like in SQL and other languages, you can check if a property value is a value in a list.
The IN
keyword allows you to specify an array of values and validate a property’s contents against each one in the list.
MATCH (p:Person)
WHERE p.yearsExp IN [1, 5, 6]
RETURN p.name, p.yearsExp
This is a companion discussion topic for the original entry at https://neo4j.com/developer/cypher/filtering-query-results/