[#154,model/query][m]: refactor to new filter structure (see ticket) updating FilterEditor widget and backends.
* ElasticSearch changes represents a significant refactor and now support filters and query via constant_score (did not support this before!)
This commit is contained in:
@@ -3,32 +3,52 @@ module("Backend ElasticSearch - Wrapper");
|
||||
|
||||
test("queryNormalize", function() {
|
||||
var backend = new recline.Backend.ElasticSearch.Wrapper();
|
||||
|
||||
var in_ = new recline.Model.Query();
|
||||
var out = backend._normalizeQuery(in_);
|
||||
equal(out.size, 100);
|
||||
var exp = {
|
||||
constant_score: {
|
||||
query: {
|
||||
match_all: {}
|
||||
}
|
||||
}
|
||||
};
|
||||
deepEqual(out, exp);
|
||||
|
||||
var in_ = new recline.Model.Query();
|
||||
in_.set({q: ''});
|
||||
var out = backend._normalizeQuery(in_);
|
||||
equal(out.q, undefined);
|
||||
deepEqual(out.query.match_all, {});
|
||||
|
||||
var in_ = new recline.Model.Query().toJSON();
|
||||
in_.q = '';
|
||||
var out = backend._normalizeQuery(in_);
|
||||
equal(out.q, undefined);
|
||||
deepEqual(out.query.match_all, {});
|
||||
|
||||
var in_ = new recline.Model.Query().toJSON();
|
||||
in_.q = 'abc';
|
||||
var out = backend._normalizeQuery(in_);
|
||||
equal(out.query.query_string.query, 'abc');
|
||||
deepEqual(out, exp);
|
||||
|
||||
var in_ = new recline.Model.Query();
|
||||
in_.addTermFilter('xyz', 'XXX');
|
||||
in_ = in_.toJSON();
|
||||
in_.attributes.q = 'abc';
|
||||
var out = backend._normalizeQuery(in_);
|
||||
deepEqual(out.filter.and[0], {term: { xyz: 'XXX'}});
|
||||
equal(out.constant_score.query.query_string.query, 'abc');
|
||||
|
||||
var in_ = new recline.Model.Query();
|
||||
in_.addFilter({
|
||||
type: 'term',
|
||||
field: 'xyz',
|
||||
term: 'XXX'
|
||||
});
|
||||
var out = backend._normalizeQuery(in_);
|
||||
var exp = {
|
||||
constant_score: {
|
||||
query: {
|
||||
match_all: {}
|
||||
},
|
||||
filter: {
|
||||
and: [
|
||||
{
|
||||
term: {
|
||||
xyz: 'XXX'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
deepEqual(out, exp);
|
||||
});
|
||||
|
||||
var mapping_data = {
|
||||
|
||||
@@ -60,7 +60,7 @@ test('query string', function () {
|
||||
test('filters', function () {
|
||||
var data = _wrapData();
|
||||
var query = new recline.Model.Query();
|
||||
query.addTermFilter('country', 'UK');
|
||||
query.addFilter({type: 'term', field: 'country', term: 'UK'});
|
||||
var out = data.query(query.toJSON());
|
||||
equal(out.total, 3);
|
||||
deepEqual(_.pluck(out.records, 'country'), ['UK', 'UK', 'UK']);
|
||||
@@ -198,7 +198,7 @@ test('query string', function () {
|
||||
|
||||
test('filters', function () {
|
||||
var dataset = makeBackendDataset();
|
||||
dataset.queryState.addTermFilter('country', 'UK');
|
||||
dataset.queryState.addFilter({type: 'term', field: 'country', term: 'UK'});
|
||||
dataset.query().then(function() {
|
||||
equal(dataset.currentRecords.length, 3);
|
||||
deepEqual(dataset.currentRecords.pluck('country'), ['UK', 'UK', 'UK']);
|
||||
|
||||
Reference in New Issue
Block a user