Class FilterOperator

java.lang.Object
org.elasticsearch.compute.operator.AbstractPageMappingOperator
org.elasticsearch.compute.operator.FilterOperator
All Implemented Interfaces:
Closeable, AutoCloseable, Operator, Releasable

public class FilterOperator extends AbstractPageMappingOperator
Filters rows from input Pages. Keeps things that evaluate to true and discards things that return false or null.
┌──────┬──────────┬────────────┐    ┌──────┬──────────┬────────────┐
│  ref │ class    │ discovered │    │  ref │ class    │ discovered │
├──────┼──────────┼────────────┤    ├──────┼──────────┼────────────┤
│  173 │ Euclid   │ 1993-01-01 │    │  173 │ Euclid   │ 1993-01-01 │
│ 2317 │ Keter    │ 1922-01-01 │ -> │ 2639 │ Euclid   │ 2010-01-01 │
│ 2639 │ Euclid   │ 2010-01-01 │    │ 3001 │ Euclid   │ 2000-01-02 │
│ 3000 │ Thaumiel │ 1971-01-01 │    └──────┴──────────┴────────────┘
│ 3001 │ Euclid   │ 2000-01-02 │
│ 5000 │ Safe     │ 2020-12-04 │
└──────┴──────────┴────────────┘

ExpressionEvaluators are the things that actually evaluate the filter. They form a tree. GREATER_THAN(LENGTH(class), DATE_EXTRACT("month", discovered)) looks like:

                 ┌──────────────┐
                 │ GREATER_THAN │
                 └──────┬───────┘
       ┌────────────────┴────────────────┐
       ▼                                 ▼
  ┌────────┐                      ┌──────────────┐
  │ LENGTH │                      │ DATE_EXTRACT │
  └────┬───┘                      └──────┬───────┘
       │                      ┌──────────┴──────────┐
       ▼                      ▼                     ▼
┌─────────────┐     ┌──────────────────┐  ┌──────────────────┐
│ LOAD(class) │     │ LITERAL("month") │  │ LOAD(discovered) │
└─────────────┘     └──────────────────┘  └──────────────────┘

Which evaluates to like:00b

┌──────┬──────────┬────────────┐    ┌──────┬──────────┬────────────┐
│  ref │ class    │ discovered │    │  ref │ class    │ discovered │
├──────┼──────────┼────────────┤    ├──────┼──────────┼────────────┤
│  173 │ Euclid   │ 1993-01-01 │    │  173 │ Euclid   │ 1993-01-01 │
│ 2317 │ Keter    │ 1922-01-01 │    │ 2317 │ Keter    │ 1922-01-01 │
│ 2639 │ Euclid   │ 2010-01-01 │ -> │ 2639 │ Euclid   │ 2010-01-01 │
│ 3000 │ Thaumiel │ 1971-01-01 │    │ 3000 │ Thaumiel │ 1971-01-01 │
│ 3001 │ Euclid   │ 2000-01-02 │    │ 3001 │ Euclid   │ 2000-01-02 │
│ 5000 │ Safe     │ 2020-12-04 │    └──────┴──────────┴────────────┘
└──────┴──────────┴────────────┘