
assets.es-head.src.app.data.boolQuery.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sirius-search Show documentation
Show all versions of sirius-search Show documentation
Provides a thin layer above Elasticsearch (Fluent Query API, Automatic Mapping, Utilities)
The newest version!
(function( app ) {
var data = app.ns("data");
var ux = app.ns("ux");
data.BoolQuery = ux.Observable.extend({
defaults: {
size: 50 // size of pages to return
},
init: function() {
this._super();
this.refuid = 0;
this.refmap = {};
this.search = {
query: { bool: { must: [], must_not: [], should: [] } },
from: 0,
size: this.config.size,
sort: [],
aggs: {}
};
this.defaultClause = this.addClause();
},
setSize: function(size) {
this.search.size = parseInt( size, 10 );
},
setPage: function(page) {
this.search.from = this.config.size * (page - 1) + 1;
},
addClause: function(value, field, op, bool) {
bool = bool || "should";
op = op || "match_all";
field = field || "_all";
var clause = this._setClause(value, field, op, bool);
var uqid = "q-" + this.refuid++;
this.refmap[uqid] = { clause: clause, value: value, field: field, op: op, bool: bool };
if(this.search.query.bool.must.length + this.search.query.bool.should.length > 1) {
this.removeClause(this.defaultClause);
}
this.fire("queryChanged", this, { uqid: uqid, search: this.search} );
return uqid; // returns reference to inner query object to allow fast updating
},
removeClause: function(uqid) {
var ref = this.refmap[uqid],
bool = this.search.query.bool[ref.bool];
var clauseIdx = bool.indexOf(ref.clause);
// Check that this clause hasn't already been removed
if (clauseIdx >=0) {
bool.splice(clauseIdx, 1);
}
},
_setClause: function(value, field, op, bool) {
var clause = {}, query = {};
if(op === "match_all") {
} else if(op === "query_string") {
query["default_field"] = field.substring(field.indexOf(".")+1);
query["query"] = value;
} else if(op === "missing") {
op = "exists";
bool = "must_not";
query["field"] = field.substring(field.indexOf(".")+1);
} else {
query[field.substring(field.indexOf(".")+1)] = value;
}
clause[op] = query;
this.search.query.bool[bool].push(clause);
return clause;
},
getData: function() {
return JSON.stringify(this.search);
}
});
})( this.app );
© 2015 - 2025 Weber Informatics LLC | Privacy Policy