elasticsearch
Loading

WHERE

Stack Serverless

The WHERE processing command produces a table that contains all the rows from the input table for which the provided condition evaluates to true.

Tip

In case of value exclusions, fields with null values will be excluded from search results. In this context a null means either there is an explicit null value in the document or there is no value at all. For example: WHERE field != "value" will be interpreted as WHERE field != "value" AND field IS NOT NULL.

Syntax

WHERE expression

Parameters

expression
A boolean expression.

Examples

FROM employees
| KEEP first_name, last_name, still_hired
| WHERE still_hired == true

Which, if still_hired is a boolean field, can be simplified to:

FROM employees
| KEEP first_name, last_name, still_hired
| WHERE still_hired

Use date math to retrieve data from a specific time range. For example, to retrieve the last hour of logs:

FROM sample_data
| WHERE @timestamp > NOW() - 1 hour

WHERE supports various functions. For example the LENGTH function:

FROM employees
| KEEP first_name, last_name, height
| WHERE LENGTH(first_name) < 4

For a complete list of all functions, refer to Functions overview.

For NULL comparison, use the IS NULL and IS NOT NULL predicates.

Example

FROM employees
| WHERE birth_date IS NULL
first_name:keyword last_name:keyword
Basil Tramer
Florian Syrotiuk
Lucien Rosenbaum

Example

FROM employees
| WHERE is_rehired IS NOT NULL
| STATS COUNT(emp_no)
COUNT(emp_no):long
84

For matching text, you can use full text search functions like MATCH.

Use MATCH to perform a match query on a specified field.

Match can be used on text fields, as well as other field types like boolean, dates, and numeric types.

Examples

FROM books
| WHERE MATCH(author, "Faulkner")
book_no:keyword author:text
2378 [Carol Faulkner, Holly Byers Ochoa, Lucretia Mott]
2713 William Faulkner
2847 Colleen Faulkner
2883 William Faulkner
3293 Danny Faulkner
FROM books
| WHERE MATCH(title, "Hobbit Back Again", {"operator": "AND"})
| KEEP title;
title:text
The Hobbit or There and Back Again
Tip

You can also use the shorthand match operator : instead of MATCH.

Use LIKE to filter data based on string patterns using wildcards. LIKE usually acts on a field placed on the left-hand side of the operator, but it can also act on a constant (literal) expression. The right-hand side of the operator represents the pattern.

The following wildcard characters are supported:

  • * matches zero or more characters.
  • ? matches one character.

Supported types

str pattern result
keyword keyword boolean
text keyword boolean

Example

FROM employees
| WHERE first_name LIKE """?b*"""
| KEEP first_name, last_name
first_name:keyword last_name:keyword
Ebbe Callaway
Eberhardt Terkki

Matching the exact characters * and . will require escaping. The escape character is backslash \. Since also backslash is a special character in string literals, it will require further escaping.

ROW message = "foo * bar"
| WHERE message LIKE "foo \\* bar"

To reduce the overhead of escaping, we suggest using triple quotes strings """

ROW message = "foo * bar"
| WHERE message LIKE """foo \* bar"""

Stack 9.1.0 Serverless

Both a single pattern or a list of patterns are supported. If a list of patterns is provided, the expression will return true if any of the patterns match.

ROW message = "foobar"
| WHERE message like ("foo*", "bar?")

Use RLIKE to filter data based on string patterns using using regular expressions. RLIKE usually acts on a field placed on the left-hand side of the operator, but it can also act on a constant (literal) expression. The right-hand side of the operator represents the pattern.

Supported types

str pattern result
keyword keyword boolean
text keyword boolean

Example

FROM employees
| WHERE first_name RLIKE """.leja.*"""
| KEEP first_name, last_name
first_name:keyword last_name:keyword
Alejandro McAlpine

Matching special characters (eg. ., *, (...) will require escaping. The escape character is backslash \. Since also backslash is a special character in string literals, it will require further escaping.

ROW message = "foo ( bar"
| WHERE message RLIKE "foo \\( bar"

To reduce the overhead of escaping, we suggest using triple quotes strings """

ROW message = "foo ( bar"
| WHERE message RLIKE """foo \( bar"""

Stack Planned Serverless

Both a single pattern or a list of patterns are supported. If a list of patterns is provided, the expression will return true if any of the patterns match.

ROW message = "foobar"
| WHERE message RLIKE ("foo.*", "bar.")

The IN operator allows testing whether a field or expression equals an element in a list of literals, fields or expressions:

Example

ROW a = 1, b = 4, c = 3
| WHERE c-a IN (3, b / 2, a)
a:integer b:integer c:integer
1 4 3

For a complete list of all operators, refer to Operators.