@oarepo/quasar-es-facets
v1.0.0-a22
Published
Displaying ES facets (aggregations) in Quasar application
Downloads
20
Readme
Quasar Elasticsearch facets (quasar-es-facets)
Renders elasticsearch aggregations as facets
Usage
Create a quasar boot file facets.js
with the following content:
import QuasarESFacets from
'@oarepo/quasar-es-facets'
export default async ({app}) => {
app.use(QuasarESFacets)
}
In your application, pass to template:
<facets
:definition="definition"
:options="options"
:facetLoader="facetLoader"
@facetSelected="facetSelected"
drawer
></facets>
Parameters
drawer
Boolean property, if passed will render a drawer with selected options.
facetSelected
An event emitted when facet's bucket is selected/deselected. It is passed a facetSelection object - reactive object with a structure:
const facetSelection = {
<facet_path>: Set(of bucket keys)
}
The facet selection contains a method
.selected()
that returns only the selected facets.
definition
The definition of allowed facets. It has the
same structure as aggs
query in elasticsearch
but might contain additional properties.
Example:
{
title: {
terms: {
field: 'title.keyword',
size: 50
},
label: 'Article Title'
},
// ...
}
options
Optional extra options passed for the facets. Contains definition of elements/attributes, label/value translators and other options.
See config.js
in this library for structure
of this property and set of possible options.
Option resolution order
For options related to a facet, the resolution order is:
- Look for it in the definition
- If not found, look for it in options under path
facetPath
- If not found, look for it in options under path
defaults
- If not found, look for it in default options under path
defaults
For options not bound to a concrete facet, the resolution is:
- Look for it in options under path
defaults
- If not found, look for it in default options under path
defaults
facetLoader
A function responsible for calling elasticsearch and returning the contents of response.aggregations
field.
Parameters:
/**
* facetSelection - an object of selected facets as described above.
* facetSelection.selected() facets must be included
* in aggs query
* This selection should also be used for ES filtering
* activeFacets - dictionary of currently open facets. These must be
* included in aggregations as well
* excludedFromQuery - array of facet paths that should be excluded from
* filtering
* extras - {size: 1000} - any extras, currently only 'size' attribute is
* provided to limit number of buckets returned
*/
async facetLoader(facetSelection, activeFacets, excludedFromQuery, extras = {}) {
// ...
}
Sample implementation in the es_api.js calls elasticsearch directly. A more sane implementation would serialize the parameters to HTTP query, call backend that would create and call the ES API.