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.
STARTS WITH keyword allows you check the value of a property that begins with the string you specify.
CONTAINS keyword, you can check if a specified string is part of a property value.
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.
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/