slush-marklogic-node
slush-marklogic-node copied to clipboard
Splitting facets and results back-end calls
Sometimes facets are big, and thus slow. To not have them slow down showing of results, you can make mlSearch do separate calls for them. It requires adding something like this above ctrl.init() in search.controller.js:
// override internal search to split results and facets call..
ctrl._search = function() {
this.searchPending = true;
// results only
var promise = this.mlSearch.search({
'return-results': true,
'return-facets': false
})
.then(this.updateSearchResults.bind(this));
// facets only
this.mlSearch.search({
'return-results': false,
'return-facets': true
})
.then(this.updateSearchResults.bind(this));
this.updateURLParams();
return promise;
};
// override the updateSearchResults to handle split of results and facets..
ctrl.updateSearchResults = function updateSearchResults(data) {
var oldFacets = ctrl.response.facets;
var oldResults = ctrl.response.results;
superCtrl.updateSearchResults.apply(ctrl, arguments);
if (!ctrl.response.facets) {
ctrl.response.facets = oldFacets;
} else {
ctrl.response.results = oldResults;
}
return ctrl;
};
Good job. As you found out later, need to add this to ctrl.updateSearchResults, too:
// forcing caching of results for an "ad-hoc" query
ctrl.mlSearch.results=ctrl.response;