Search syntax

This page provides information on the syntax for searching text fields.

The same search query syntax is used across Shopify as an interface to search functionality. This includes the storefront, admin, mobile apps, customer group queries, Admin API, and Storefront API. For the APIs, the specific resources that can be queried are defined in the reference documentation.

Search query grammar overview

A string query is a text search made up of terms, connectives, modifiers, and comparators. The search grammar rules defined here can be built into larger structures as defined by the search query syntax.

The search grammar is expressed similarly to EBNF and uses some baseline terminal symbols as follows:

Item Description
whitespace Any sequence of space, tab, or newline characters.
name Any sequence of non-whitespace, non-special characters. See Special characters for more information.
value Any name, or any quoted string (single or double quotes are both permitted).

Query

The root of the grammar is a Query.

Query = Term { [ whitespace Connective ] whitespace Term }

A Query is one or more Terms separated by whitespace and optionally by single Connectives. A Query may have optional leading and trailing whitespace.

query=John Smith

Connectives

Connective = "AND" | "OR"

When a Connective is not specified between two Terms, AND is implied.

query=state:enabled OR state:disabled

Terms

Term = [ Modifier ] ( "(" Query ")" | [ name Comparator ] value )

A term consists of an optional modifier, followed either by a sub-Query (enclosed in parentheses) or a value with an optional name-and-Comparator.

query=-first_name:Bob AND orders_count:>3 orders_count:<=4

Modifier

Modifier = "-" | "NOT" whitespace

A modifier can be "-" (in which case it must not be followed by whitespace) or it may be "NOT" (in which case it must be followed by whitespace). Both mean the same thing.

query=-first_name:Bob

Comparators

Comparator = ":" | ":<" | ":>" | ":<=" | ":>="

The current list of comparators is:

  • : is equality*
  • :< is less-than
  • :> is greater-than
  • :<= is less-than-or-equal-to
  • :>= is greater-than-or-equal-to

* equality depends on how a field is indexed. For numeric fields : represents equality. For tokenized fields, equality exists if the term is found anywhere in the field. For non-tokenized fields, the search query string must match the searched field exactly.

Search query syntax

Shopify search query syntax is based on the defined grammar and enables the following search behavior.

Term searches will make a case-insensitive search appearing in any field in a document.

query=Bob Norman

This will make a case insensitive search for both "bob" AND "norman".

Field searches apply to terms in specific fields.

query=first_name:Bob age:27

This will search for the "Bob" in the "first_name" field AND "27" in the "age" field. The value must immediately follow the field with no whitespace: first_name: Bob will actually search for the terms "first_name" and "Bob".

A range search specifies a range of values to search against.

query=orders_count:>16 orders_count:<=30

This will match documents where the orders_count field is greater than 16 and less than or equal to 30. The supported operators are >, >=, < and <=.

Equality is done as orders_count:16, not orders_count:=16; the latter will actually search for the term "=16" in the orders_count field.

Not query

This query excludes documents that include the NOT operator.

query=-bob

query=NOT bob

Both of these queries will not return documents including the term "bob".

The "NOT" operator must be capitalized to execute a Not Query, and only applies to the following space separated term or query. The minus sign must precede the field, value, or subquery e.g. -field:value -value -(subquery).

Boolean operators

Boolean operators allow terms to be combined through logic operators.

query=bob OR norman AND Shopify

This will search for documents that MUST have the term "Shopify" and SHOULD have at least one of the terms "bob" or "norman".

query=bob OR norman Shopify

This query is equivalent to the query above, since OR has a higher operator precedence than AND. Furthermore, the default boolean operator between terms or queries is AND, so no explicit AND operator is needed.

Grouping

Shopify supports using parentheses to group clauses to form sub queries.

query=state:disabled AND ("sale shopper" OR VIP)

This searches for disabled customers with tags sale shopper or VIP.

Phrase query

A Phrase is a group of words surrounded by double quotes

query=name:"Bob Norman"

This will search for the term "bob" followed immediately by the term "norman" in the "name" field. Phrase queries can be used outside of a field query, e.g. "Bob Norman".

Special characters

Shopify supports the ability to escape special characters using backslash escaping. The current list of special characters is:


 : \ ( )

Names can include the characters -, ', and " but cannot start with them. Names can include escaped characters using backslash escaping.

Exists query

The exists query will match documents with a non-NULL value in the specified field.

query=published_at:*

This query can be combined with a Not Query to find fields missing a value, e.g. -published_at:*