elastic.js
Version:
Javascript API for ElasticSearch DSL
223 lines (182 loc) • 8.2 kB
JavaScript
/**
@class
<p>A termsStatsFacet allows you to compute statistics over an aggregate key (term). Essentially this
facet provides the functionality of what is often refered to as a <em>pivot table</em>.</p>
<p>Facets are similar to SQL <code>GROUP BY</code> statements but perform much
better. You can also construct several <em>"groups"</em> at once by simply
specifying multiple facets.</p>
<div class="alert-message block-message info">
<p>
<strong>Tip: </strong>
For more information on faceted navigation, see
<a href="http://en.wikipedia.org/wiki/Faceted_classification">this</a>
Wikipedia article on Faceted Classification.
</p>
</div>
@name ejs.TermStatsFacet
@ejs facet
@borrows ejs.FacetMixin.facetFilter as facetFilter
@borrows ejs.FacetMixin.global as global
@borrows ejs.FacetMixin.mode as mode
@borrows ejs.FacetMixin.cacheFilter as cacheFilter
@borrows ejs.FacetMixin.scope as scope
@borrows ejs.FacetMixin.nested as nested
@borrows ejs.FacetMixin._type as _type
@borrows ejs.FacetMixin.toJSON as toJSON
@desc
<p>A facet which computes statistical data based on an aggregate key.</p>
@param {String} name The name which be used to refer to this facet. For instance,
the facet itself might utilize a field named <code>doc_authors</code>. Setting
<code>name</code> to <code>Authors</code> would allow you to refer to the
facet by that name, possibly simplifying some of the display logic.
*/
ejs.TermStatsFacet = function (name) {
var
_common = ejs.FacetMixin(name),
facet = _common.toJSON();
facet[name].terms_stats = {};
return extend(_common, {
/**
Sets the field for which statistical information will be generated.
@member ejs.TermStatsFacet
@param {String} fieldName The field name whose data will be used to construct the facet.
@returns {Object} returns <code>this</code> so that calls can be chained.
*/
valueField: function (fieldName) {
if (fieldName == null) {
return facet[name].terms_stats.value_field;
}
facet[name].terms_stats.value_field = fieldName;
return this;
},
/**
Sets the field which will be used to pivot on (group-by).
@member ejs.TermStatsFacet
@param {String} fieldName The field name whose data will be used to construct the facet.
@returns {Object} returns <code>this</code> so that calls can be chained.
*/
keyField: function (fieldName) {
if (fieldName == null) {
return facet[name].terms_stats.key_field;
}
facet[name].terms_stats.key_field = fieldName;
return this;
},
/**
Sets a script that will provide the terms for a given document.
@member ejs.TermStatsFacet
@param {String} script The script code.
@returns {Object} returns <code>this</code> so that calls can be chained.
*/
scriptField: function (script) {
if (script == null) {
return facet[name].terms_stats.script_field;
}
facet[name].terms_stats.script_field = script;
return this;
},
/**
Define a script to evaluate of which the result will be used to generate
the statistical information.
@member ejs.TermStatsFacet
@param {String} code The script code to execute.
@returns {Object} returns <code>this</code> so that calls can be chained.
*/
valueScript: function (code) {
if (code == null) {
return facet[name].terms_stats.value_script;
}
facet[name].terms_stats.value_script = code;
return this;
},
/**
<p>Allows you to return all terms, even if the frequency count is 0. This should not be
used on fields that contain a large number of unique terms because it could cause
<em>out-of-memory</em> errors.</p>
@member ejs.TermStatsFacet
@param {String} trueFalse <code>true</code> or <code>false</code>
@returns {Object} returns <code>this</code> so that calls can be chained.
*/
allTerms: function (trueFalse) {
if (trueFalse == null) {
return facet[name].terms_stats.all_terms;
}
facet[name].terms_stats.all_terms = trueFalse;
return this;
},
/**
The script language being used. Currently supported values are
<code>javascript</code>, <code>groovy</code>, and <code>mvel</code>.
@member ejs.TermStatsFacet
@param {String} language The language of the script.
@returns {Object} returns <code>this</code> so that calls can be chained.
*/
lang: function (language) {
if (language == null) {
return facet[name].terms_stats.lang;
}
facet[name].terms_stats.lang = language;
return this;
},
/**
Allows you to set script parameters to be used during the execution of the script.
@member ejs.TermStatsFacet
@param {Object} oParams An object containing key/value pairs representing param name/value.
@returns {Object} returns <code>this</code> so that calls can be chained.
*/
params: function (oParams) {
if (oParams == null) {
return facet[name].terms_stats.params;
}
facet[name].terms_stats.params = oParams;
return this;
},
/**
Sets the number of facet entries that will be returned for this facet. For instance, you
might ask for only the top 5 aggregate keys although there might be hundreds of
unique keys. <strong>Higher settings could cause memory strain</strong>.
@member ejs.TermStatsFacet
@param {Integer} facetSize The numer of facet entries to be returned.
@returns {Object} returns <code>this</code> so that calls can be chained.
*/
size: function (facetSize) {
if (facetSize == null) {
return facet[name].terms_stats.size;
}
facet[name].terms_stats.size = facetSize;
return this;
},
/**
Sets the type of ordering that will be performed on the date
buckets. Valid values are:
count - default, sort by the number of items in the bucket
term - sort by term value.
reverse_count - reverse sort of the number of items in the bucket
reverse_term - reverse sort of the term value.
total - sorts by the total value of the bucket contents
reverse_total - reverse sort of the total value of bucket contents
min - the minimum value in the bucket
reverse_min - the reverse sort of the minimum value
max - the maximum value in the bucket
reverse_max - the reverse sort of the maximum value
mean - the mean value of the bucket contents
reverse_mean - the reverse sort of the mean value of bucket contents.
@member ejs.TermStatsFacet
@param {String} o The ordering method
@returns {Object} returns <code>this</code> so that calls can be chained.
*/
order: function (o) {
if (o == null) {
return facet[name].terms_stats.order;
}
o = o.toLowerCase();
if (o === 'count' || o === 'term' || o === 'reverse_count' ||
o === 'reverse_term' || o === 'total' || o === 'reverse_total' ||
o === 'min' || o === 'reverse_min' || o === 'max' ||
o === 'reverse_max' || o === 'mean' || o === 'reverse_mean') {
facet[name].terms_stats.order = o;
}
return this;
}
});
};