Skip to content

Question: Disjunctive Filters between Numeric and Facets #139

Open
@nerder

Description

@nerder

We are trying to create the following query:

status:active OR lastAttendedDate > 1700000000000

Our code looks like this:

filterState.add(FilterGroupID.or('someGroup'), [
  Filter.facet('status', "active"),
  Filter.comparison('date', NumericOperator.greaterOrEquals, 170000000),
]);

When we look at the query parameters produced tho, we got this status:active AND lastAttendedDate > 1700000000000

By looking at the internal code:

  String? sql(Set<FilterGroup> filterGroups) {
    final groups = filterGroups.whereNot((element) => element.isEmpty);
    if (groups.isEmpty) return null;
    return groups.map(_sqlGroup).join(' AND ');
  }

This function seems to be adding an AND between multiple-group, but in our case what is not obvious to us is why our filter is considered to be made of 2 groups, where we only have one. This seems to happen only when we use Filter.comparison or Filter.range.

Our expectation is that when we add a Disjuctive group that will be respected, but in this case it seems to be forced into a conjuctive one, why is that?

Some additional info is that all our facets are configured as filters only in the dashboard.

Any help?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions