Skip to main content

Applying Filters

Applying a value based Filter​

When you want to apply filters to your search and don't want them to be displayed as facets. TermFilter applies a text filter to a particular field to the search.

Adding a filter to Searchkit Config​

Within the Searchkit config, there is a filters array which allows you to configure one or more filters for your search. Below is an example of adding a term filter to search.

import {Filter} from '@searchkit/sdk';

const config = {
host: 'http://localhost:9200',
index: 'movies',
hits: {
fields: ['actors', 'writers'],
},
filters: [
new Filter({
identifier: 'type',
field: 'type',
label: 'type',
}),
],
};

const request = Searchkit(config);
const response = await request
.setFilters([{identifier: 'type', value: 'movies'}])
.execute({
hits: {
size: 10,
from: 0,
},
});

Options​

OptionDescription
fieldfield to be used for term filter, preferably a field that is raw, not tokenized
identifierRequired to be unique. Used to apply filters on field
labelUI label for appliedFilters node.
displayOptional. Used on UI to specify what component to handle filter in SelectedFilters

The filters that you will apply will also be returned in the response under summary.appliedFilters.

{
"hits": {
"items": [
// 10 items
],
"page": {
"from": 0,
"pageNumber": 0,
"size": 10,
"total": 11,
"totalPages": 2
}
},
"sortedBy": undefined,
"summary": {
"appliedFilters": [
{
"display": "TermFilter",
"id": "type_movies",
"identifier": "location",
"label": "Location",
"value": "movies"
}
],
"disabledFilters": [],
"query": "",
"sortOptions": [],
"total": 11
}
}

Applying a numeric range filter​

When you want to apply filters to your search and don't want them to be displayed as facets. NumericRangeFilter applies a numberic range filter to a particular field to the search.

  • Adding a date range component to UI

Elasticsearch Mapping​

Below is an example mapping for the field metascore. We need to use a numeric type field type for this facet.

{
"properties": {
"metascore": {
"type": "float"
}
}
}

Adding a filter to Searchkit Config​

Within the Searchkit config, there is a filters array which allows you to configure one or more filters for your search. Below is an example of adding a NumericRangeFilter to search.

import {Filter} from '@searchkit/sdk';

const config = {
host: 'http://localhost:9200',
index: 'movies',
hits: {
fields: ['actors', 'writers'],
},
filters: [
new Filter({
identifier: 'metascore',
field: 'metascore',
label: 'Score',
}),
],
};

const request = Searchkit(config);
const response = await request
.setFilters([{identifier: 'metascore', min: 10, max: 90}])
.execute({
hits: {
size: 10,
from: 0,
},
});

Options​

OptionDescription
fieldfield to be used for term filter, preferably a field that is raw, not tokenized
identifierRequired to be unique. Used to apply filters on field
labelUI label for appliedFilters node.
displayOptional. Used on UI to specify what component to handle filter in SelectedFilters

The filters that you will apply will also be returned in the response under summary.appliedFilters.

{
"hits": {
"items": [
// 10 items
],
"page": {
"from": 0,
"pageNumber": 0,
"size": 10,
"total": 11,
"totalPages": 2
}
},
"sortedBy": undefined,
"summary": {
"appliedFilters": [
{
"display": "NumericRangeFilter",
"id": "metascore_10_90",
"identifier": "metascore",
"label": "Score",
"value": "10 - 90"
}
],
"disabledFilters": [],
"query": "",
"sortOptions": [],
"total": 11
}
}

Applying a date range filter​

When you want to apply filters to your search and don't want them to be displayed as facets. NumericRangeFilter applies a numberic range filter to a particular field to the search.

Elasticsearch Mapping​

Below is an example mapping for the field releasedby. We need to use a numeric type field type for this facet.

{
"properties": {
"releasedby": {
"type": "date"
}
}
}

Adding a filter to Searchkit Config​

Within the Searchkit config, there is a filters array which allows you to configure one or more filters for your search. Below is an example of adding a NumericRangeFilter to search.

import {Filter} from '@searchkit/sdk';

const config = {
host: 'http://localhost:9200',
index: 'movies',
hits: {
fields: ['actors', 'writers'],
},
filters: [
new Filter({
identifier: 'releasedby',
field: 'releasedby',
label: 'Released By',
}),
],
};

const request = Searchkit(config);
const response = await request
.setFilters([{identifier: 'releasedby', dateMin: '2021-07-11T13:03:37.061Z'}])
.execute({
hits: {
size: 10,
from: 0,
},
});

Options​

OptionDescription
fieldfield to be used for term filter, preferably a field that is raw, not tokenized
identifierRequired to be unique. Used to apply filters on field
labelUI label for appliedFilters node.
displayOptional. Used on UI to specify what component to handle filter in SelectedFilters

The filters that you will apply will also be returned in the response under summary.appliedFilters.

{
"hits": {
"items": [
// 10 items
],
"page": {
"from": 0,
"pageNumber": 0,
"size": 10,
"total": 11,
"totalPages": 2
}
},
"sortedBy": undefined,
"summary": {
"appliedFilters": [
{
"display": "DateRangeFilter",
"id": "releasedby",
"identifier": "releasedby",
"label": "Released By",
"value": "2021-07-11T13:03:37.061Z"
}
],
"disabledFilters": [],
"query": "",
"sortOptions": [],
"total": 11
}
}

Applying a geolocation value filter​

When you want to apply a geo location filter to your search and don't want them to be displayed as facets.

Adding a filter to Searchkit Config​

Within the Searchkit config, there is a filters array which allows you to configure one or more filters for your search.

import {Filter} from 'searchkit/sdk';

const config = {
host: 'http://localhost:9200',
index: 'movies',
hits: {
fields: ['actors', 'writers'],
},
filters: [
new Filter({
identifier: 'location',
field: 'location',
label: 'Location',
}),
],
};

const request = Searchkit(config);
const response = await request
.setFilters([
{
identifier: 'location',
geoBoundingBox: {
topLeft: {lat: 50.73, lon: -75.1},
bottomRight: {lat: 40.01, lon: -55.12},
},
},
])
.execute({
hits: {
size: 10,
from: 0,
},
});

Options​

OptionDescription
fieldfield to be used for term filter, preferably a field that is raw, not tokenized
identifierRequired to be unique. Used to apply filters on field
labelUI label for appliedFilters node.
displayOptional. Used on UI to specify what component to handle filter in SelectedFilters

The filters that you will apply will also be returned in the response under summary.appliedFilters.

{
hits: {
items: [
// 10 items
],
"page": {
"from": 0,
"pageNumber": 0,
"size": 10,
"total": 11,
"totalPages": 2,
}
},
"sortedBy": undefined,
"summary": {
"appliedFilters": [
{
"bottomRight": {
"lat": 40.01,
"lon": -55.12,
},
"display": "GeoBoundingBoxFilter",
"id": "location_{\\"topLeft\\":{\\"lat\\":50.73,\\"lon\\":-75.1},\\"bottomRight\\":{\\"lat\\":40.01,\\"lon\\":-55.12}}",
"identifier": "location",
"label": "Location",
"topLeft": {
"lat": 50.73,
"lon": -75.1,
}
}
],
"disabledFilters": [],
"query": "",
"sortOptions": [],
"total": 11,
},
}