elastic.js
Version:
Javascript API for ElasticSearch DSL
217 lines (176 loc) • 7.29 kB
JavaScript
/**
@mixin
<p>The DirectSettingsMixin provides support for common options used across
various <code>Suggester</code> implementations. This object should not be
used directly.</p>
@name ejs.DirectSettingsMixin
@param {String} settings The object to set the options on.
*/
ejs.DirectSettingsMixin = function (settings) {
return {
/**
<p>Sets the accuracy. How similar the suggested terms at least
need to be compared to the original suggest text.</p>
@member ejs.DirectSettingsMixin
@param {Double} a A positive double value between 0 and 1.
@returns {Object} returns <code>this</code> so that calls can be chained.
*/
accuracy: function (a) {
if (a == null) {
return settings.accuracy;
}
settings.accuracy = a;
return this;
},
/**
<p>Sets the suggest mode. Valid values are:</p>
<dl>
<dd><code>missing</code> - Only suggest terms in the suggest text that aren't in the index</dd>
<dd><code>popular</code> - Only suggest suggestions that occur in more docs then the original suggest text term</dd>
<dd><code>always</code> - Suggest any matching suggestions based on terms in the suggest text</dd>
</dl>
@member ejs.DirectSettingsMixin
@param {String} m The mode of missing, popular, or always.
@returns {Object} returns <code>this</code> so that calls can be chained.
*/
suggestMode: function (m) {
if (m == null) {
return settings.suggest_mode;
}
m = m.toLowerCase();
if (m === 'missing' || m === 'popular' || m === 'always') {
settings.suggest_mode = m;
}
return this;
},
/**
<p>Sets the sort mode. Valid values are:</p>
<dl>
<dd><code>score</code> - Sort by score first, then document frequency, and then the term itself</dd>
<dd><code>frequency</code> - Sort by document frequency first, then simlarity score and then the term itself</dd>
</dl>
@member ejs.DirectSettingsMixin
@param {String} s The score type of score or frequency.
@returns {Object} returns <code>this</code> so that calls can be chained.
*/
sort: function (s) {
if (s == null) {
return settings.sort;
}
s = s.toLowerCase();
if (s === 'score' || s === 'frequency') {
settings.sort = s;
}
return this;
},
/**
<p>Sets what string distance implementation to use for comparing
how similar suggested terms are. Valid values are:</p>
<dl>
<dd><code>internal</code> - based on damerau_levenshtein but but highly optimized for comparing string distance for terms inside the index</dd>
<dd><code>damerau_levenshtein</code> - String distance algorithm based on Damerau-Levenshtein algorithm</dd>
<dd><code>levenstein</code> - String distance algorithm based on Levenstein edit distance algorithm</dd>
<dd><code>jarowinkler</code> - String distance algorithm based on Jaro-Winkler algorithm</dd>
<dd><code>ngram</code> - String distance algorithm based on character n-grams</dd>
</dl>
@member ejs.DirectSettingsMixin
@param {String} s The string distance algorithm name.
@returns {Object} returns <code>this</code> so that calls can be chained.
*/
stringDistance: function (s) {
if (s == null) {
return settings.string_distance;
}
s = s.toLowerCase();
if (s === 'internal' || s === 'damerau_levenshtein' ||
s === 'levenstein' || s === 'jarowinkler' || s === 'ngram') {
settings.string_distance = s;
}
return this;
},
/**
<p>Sets the maximum edit distance candidate suggestions can have
in order to be considered as a suggestion.</p>
@member ejs.DirectSettingsMixin
@param {Integer} max An integer value greater than 0.
@returns {Object} returns <code>this</code> so that calls can be chained.
*/
maxEdits: function (max) {
if (max == null) {
return settings.max_edits;
}
settings.max_edits = max;
return this;
},
/**
<p>The factor that is used to multiply with the size in order
to inspect more candidate suggestions.</p>
@member ejs.DirectSettingsMixin
@param {Integer} max A positive integer value.
@returns {Object} returns <code>this</code> so that calls can be chained.
*/
maxInspections: function (max) {
if (max == null) {
return settings.max_inspections;
}
settings.max_inspections = max;
return this;
},
/**
<p>Sets a maximum threshold in number of documents a suggest text
token can exist in order to be corrected.</p>
@member ejs.DirectSettingsMixin
@param {Double} max A positive double value.
@returns {Object} returns <code>this</code> so that calls can be chained.
*/
maxTermFreq: function (max) {
if (max == null) {
return settings.max_term_freq;
}
settings.max_term_freq = max;
return this;
},
/**
<p>Sets the number of minimal prefix characters that must match in
order be a candidate suggestion.</p>
@member ejs.DirectSettingsMixin
@param {Integer} len A positive integer value.
@returns {Object} returns <code>this</code> so that calls can be chained.
*/
prefixLen: function (len) {
if (len == null) {
return settings.prefix_len;
}
settings.prefix_len = len;
return this;
},
/**
<p>Sets the minimum length a suggest text term must have in order
to be corrected.</p>
@member ejs.DirectSettingsMixin
@param {Integer} len A positive integer value.
@returns {Object} returns <code>this</code> so that calls can be chained.
*/
minWordLen: function (len) {
if (len == null) {
return settings.min_word_len;
}
settings.min_word_len = len;
return this;
},
/**
<p>Sets a minimal threshold of the number of documents a suggested
term should appear in.</p>
@member ejs.DirectSettingsMixin
@param {Double} min A positive double value.
@returns {Object} returns <code>this</code> so that calls can be chained.
*/
minDocFreq: function (min) {
if (min == null) {
return settings.min_doc_freq;
}
settings.min_doc_freq = min;
return this;
}
};
};