return Promise.resolve();
}
+ if (ctx.result.facets) {
+ // No need to fetch pre-compiled facets
+ console.debug('Showing pre-compiled facets');
+ ctx.result.facetData = this.formatFacets(ctx.result.facets);
+ return Promise.resolve();
+ }
+
return new Promise((resolve, reject) => {
this.net.request('open-ils.search',
'open-ils.search.facet_cache.retrieve',
ctx.result.facet_key
).subscribe(facets => {
- const facetData = {};
- Object.keys(facets).forEach(cmfId => {
- const facetHash = facets[cmfId];
- const cmf = this.cmfMap[cmfId];
-
- const cmfData = [];
- Object.keys(facetHash).forEach(value => {
- const count = facetHash[value];
- cmfData.push({value : value, count : count});
- });
-
- if (!facetData[cmf.field_class()]) {
- facetData[cmf.field_class()] = {};
- }
-
- facetData[cmf.field_class()][cmf.name()] = {
- cmfLabel : cmf.label(),
- valueList : cmfData.sort((a, b) => {
- if (a.count > b.count) { return -1; }
- if (a.count < b.count) { return 1; }
- // secondary alpha sort on display value
- return a.value < b.value ? -1 : 1;
- })
- };
- });
-
+ const facetData = this.formatFacets(facets);
this.lastFacetKey = ctx.result.facet_key;
this.lastFacetData = ctx.result.facetData = facetData;
resolve();
});
}
+ formatFacets(facets: any) {
+ const facetData = {};
+ Object.keys(facets).forEach(cmfId => {
+ const facetHash = facets[cmfId];
+ const cmf = this.cmfMap[cmfId];
+
+ const cmfData = [];
+ Object.keys(facetHash).forEach(value => {
+ const count = facetHash[value];
+ cmfData.push({value : value, count : count});
+ });
+
+ if (!facetData[cmf.field_class()]) {
+ facetData[cmf.field_class()] = {};
+ }
+
+ facetData[cmf.field_class()][cmf.name()] = {
+ cmfLabel : cmf.label(),
+ valueList : cmfData.sort((a, b) => {
+ if (a.count > b.count) { return -1; }
+ if (a.count < b.count) { return 1; }
+ // secondary alpha sort on display value
+ return a.value < b.value ? -1 : 1;
+ })
+ };
+ });
+
+ return facetData;
+ }
+
fetchCcvms(): Promise<void> {
if (Object.keys(this.ccvmMap).length) {
return {count => 0} unless $results;
- format_facets($results->{aggregations});
return {
count => $results->{hits}->{total},
map { [$_->{_id}, undef, $_->{_score}] }
grep {defined $_} @{$results->{hits}->{hits}}
],
- facets => $results->{aggregations},
+ facets => format_facets($results->{aggregations}),
# Note at time of writing no search caching is used for
# Elasticsearch, but providing cache keys allows the caller to
# know if this search matches another search.
for my $fname (keys %$aggregations) {
- my ($name, $field_class) = split('|', $fname);
+ my ($field_class, $name) = split(/\|/, $fname);
+
my ($bib_field) = grep {
$_->name eq $name && $_->search_group eq $field_class
} @$bib_search_fields;