facet method
- @Assert('isGreaterThanOrEqualTo == null || (isGreaterThanOrEqualTo != null && (isGreaterThanOrEqualTo is double || isGreaterThanOrEqualTo is DateTime))', '`isMoreThanOrEqualTo` must be a double or a DateTime')
- @Assert('isLessThan == null || (isLessThan != null && (isLessThan is double || isLessThan is DateTime))', '`isLessThan` must be a double or a DateTime')
- @Assert('(isEqualTo != null && isFurtherThanOrAt == null && isLessFarThan == null) || (isEqualTo == null && (isFurtherThanOrAt != null || isLessFarThan != null)) || (isEqualTo == null && isFurtherThanOrAt == null && isLessFarThan == null)', 'You cannot use isEqualTo and isFurtherThanOrAt/isLessFarThan at the same time.')
- @Assert('((isFurtherThanOrAt != null || isLessFarThan != null) && isGreaterThanOrEqualTo == null && isLessThan == null) || ((isGreaterThanOrEqualTo != null || isLessThan != null) && isFurtherThanOrAt == null && isLessFarThan == null) || (isGreaterThanOrEqualTo == null && isLessThan == null && isFurtherThanOrAt == null && isLessFarThan == null)', 'You cannot use isFurtherThanOrAt/isLessFarThan and isGreaterThanOrEqualTo/isLessThan at the same time.')
- @Assert('((isFurtherThanOrAt != null || isLessFarThan != null) && from == null) || (isFurtherThanOrAt == null && isLessFarThan == null && from == null)', 'You must provide from (which is the center point of your query) when using isFurtherThanOrAt/isLessFarThan.')
Creates and returns a new ElasticQuery with additional ElasticFacet, an object
which rovides the counts of each value for a field, or counts of documents within the provided ranges
if isMoreThanOrEqualTo
or isLessThan
is provided.
See https://www.elastic.co/guide/en/app-search/current/facets.html
Implementation
@Assert(
'isGreaterThanOrEqualTo == null || (isGreaterThanOrEqualTo != null && (isGreaterThanOrEqualTo is double || isGreaterThanOrEqualTo is DateTime))',
'`isMoreThanOrEqualTo` must be a double or a DateTime')
@Assert(
'isLessThan == null || (isLessThan != null && (isLessThan is double || isLessThan is DateTime))',
'`isLessThan` must be a double or a DateTime')
@Assert(
'(isEqualTo != null && isFurtherThanOrAt == null && isLessFarThan == null) || (isEqualTo == null && (isFurtherThanOrAt != null || isLessFarThan != null)) || (isEqualTo == null && isFurtherThanOrAt == null && isLessFarThan == null)',
'You cannot use isEqualTo and isFurtherThanOrAt/isLessFarThan at the same time.')
@Assert(
'((isFurtherThanOrAt != null || isLessFarThan != null) && isGreaterThanOrEqualTo == null && isLessThan == null) || ((isGreaterThanOrEqualTo != null || isLessThan != null) && isFurtherThanOrAt == null && isLessFarThan == null) || (isGreaterThanOrEqualTo == null && isLessThan == null && isFurtherThanOrAt == null && isLessFarThan == null)',
'You cannot use isFurtherThanOrAt/isLessFarThan and isGreaterThanOrEqualTo/isLessThan at the same time.')
@Assert(
'((isFurtherThanOrAt != null || isLessFarThan != null) && from == null) || (isFurtherThanOrAt == null && isLessFarThan == null && from == null)',
'You must provide from (which is the center point of your query) when using isFurtherThanOrAt/isLessFarThan.')
ElasticQuery facet(
String field, {
String? name,
Object? isGreaterThanOrEqualTo,
Object? isLessThan,
Object? isFurtherThanOrAt,
Object? isLessFarThan,
LatLong? from,
@Default(GeoUnit.meters) GeoUnit? unit,
int? size,
//List<ElasticRange>? ranges,
}) {
Map<String, _ElasticQueryFacet> _facets =
facets != null ? {...facets!} : {};
_ElasticQueryFacet facet;
/*if (ranges != null) {
facet = _ElasticQueryFacet(
type: "range",
ranges: ranges
.map(
(range) => _ElasticRangeFacet(
name: range.name,
from: range.from is DateTime
? (range.from as DateTime).toUTCString()
: range.from?.toString(),
to: range.to is DateTime
? (range.to as DateTime).toUTCString()
: range.to?.toString(),
),
)
.toList(),
center: center,
unit: unit,
);
}*/
if (from != null) {
final newRange = _ElasticRangeFacet(
name: name,
from: isFurtherThanOrAt?.toString(),
to: isLessFarThan?.toString(),
);
facet = _ElasticQueryFacet(
type: "range",
ranges: [
...?facets?[field]?.ranges,
newRange,
],
center: from,
unit: unit,
);
} else if (isGreaterThanOrEqualTo != null || isLessThan != null) {
final newRange = _ElasticRangeFacet(
name: name,
from: isGreaterThanOrEqualTo is DateTime
? isGreaterThanOrEqualTo.toUTCString()
: isGreaterThanOrEqualTo?.toString(),
to: isLessThan is DateTime
? isLessThan.toUTCString()
: isLessThan?.toString(),
);
facet = _ElasticQueryFacet(
type: "range",
ranges: [
...?facets?[field]?.ranges,
newRange,
],
);
} else {
facet = _ElasticQueryFacet(
type: "value",
size: size,
);
}
_facets[field] = facet;
return copyWith(facets: _facets);
}