Filter State
About this widget
A FilterState
is a class that holds one or several filters, organized in groups.
The FilterState
can be modified at any moment by adding or removing filters, which will be applied to searches performed by the connected searcher.
There are three types of filters:
Filter.Facet
Filter.Numeric
Filter.Tag
You can read more about each filter type in our filtering guide.
A group of filters must be identified by a FilterGroupID
. A FilterGroupID
must have:
- A name
- A
FilterOperator
, which can either beFilterOperator.And
orFilterOperator.Or
A FilterOperator
indicates which type of boolean operator should be applied between each filters in the group.
For advanced filtering, you can read more about filter grouping and boolean operators.
Examples
Add and remove filters from a FilterState
.
1
2
3
4
5
6
7
8
9
10
11
val filterState = FilterState()
val filterGroupID = FilterGroupID("myGroup", FilterOperator.And)
val color = Attribute("color")
val red = Filter.Facet(color, "red")
val green = Filter.Facet(color, "green")
val blue = Filter.Facet(color, "blue")
filterState.add(filterGroupID, red, green, blue)
// "color:red AND color:green AND color:blue"
filterState.remove(filterGroupID, green)
// "color:red AND color:blue"
Notify and listen to changes.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
val filterState = FilterState()
val filterGroupID = FilterGroupID("myGroup", FilterOperator.And)
val color = Attribute("color")
val facets = setOf(
Filter.Facet(color, "red"),
Filter.Facet(color, "green"),
Filter.Facet(color, "blue")
)
filterState.notify {
add(filterGroupID, facets)
}
filterState.filters.subscribe { filters ->
assertEquals(facets, filters.getFacetFilters(filterGroupID))
}
Convert a FilterState
to an SQL-like string expression which can be used with Query
.
1
2
3
val query = Query()
query.filters = FilterGroupsConverter.SQL(FilterState().toFilterGroups())