algoliasearch-helper-flutter
algoliasearch-helper-flutter copied to clipboard
Question: Disjunctive Filters between Numeric and Facets
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?
Ok it seems like that this is intended as per the documentation: https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/in-depth/combining-boolean-operators/#mixed-filter-types-in-or-conditions
Nonetheless it's quite an unexpected behaviour, I'd rather throw an error that point you to the documentation that "automagically" fix the query.