[backend/elasticsearch][s]: ES backend supports full text queries and sorting.
This commit is contained in:
@@ -47,9 +47,33 @@ this.recline.Backend = this.recline.Backend || {};
|
|||||||
alert('This backend currently only supports read operations');
|
alert('This backend currently only supports read operations');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
_normalizeQuery: function(queryObj) {
|
||||||
|
if (queryObj.toJSON) {
|
||||||
|
var out = queryObj.toJSON();
|
||||||
|
} else {
|
||||||
|
var out = _.extend({}, queryObj);
|
||||||
|
}
|
||||||
|
if (out.q != undefined && out.q.trim() === '') {
|
||||||
|
delete out.q;
|
||||||
|
}
|
||||||
|
if (!out.q) {
|
||||||
|
out.query = {
|
||||||
|
match_all: {}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.query = {
|
||||||
|
query_string: {
|
||||||
|
query: out.q
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete out.q;
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
},
|
||||||
query: function(model, queryObj) {
|
query: function(model, queryObj) {
|
||||||
|
var queryNormalized = this._normalizeQuery(queryObj);
|
||||||
|
var data = {source: JSON.stringify(queryNormalized)};
|
||||||
var base = this._getESUrl(model);
|
var base = this._getESUrl(model);
|
||||||
var data = _.extend({}, queryObj);
|
|
||||||
var jqxhr = $.ajax({
|
var jqxhr = $.ajax({
|
||||||
url: base + '/_search',
|
url: base + '/_search',
|
||||||
data: data,
|
data: data,
|
||||||
|
|||||||
@@ -1,6 +1,27 @@
|
|||||||
(function ($) {
|
(function ($) {
|
||||||
module("Backend ElasticSearch");
|
module("Backend ElasticSearch");
|
||||||
|
|
||||||
|
test("ElasticSearch queryNormalize", function() {
|
||||||
|
var backend = new recline.Backend.ElasticSearch();
|
||||||
|
var in_ = new recline.Model.Query();
|
||||||
|
in_.set({q: ''});
|
||||||
|
var out = backend._normalizeQuery(in_);
|
||||||
|
equal(out.q, undefined);
|
||||||
|
deepEqual(out.query.match_all, {});
|
||||||
|
|
||||||
|
var backend = new recline.Backend.ElasticSearch();
|
||||||
|
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');
|
||||||
|
});
|
||||||
|
|
||||||
var mapping_data = {
|
var mapping_data = {
|
||||||
"note": {
|
"note": {
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|||||||
Reference in New Issue
Block a user