lib/querymw.js (52 lines of code) (raw):
var querymen = require('querymen');
function phraseSplit(searchString) {
var s1 = searchString.match(/\\?.|^$/g).reduce((p, c) => {
if(c === '"'){
p.quote ^= 1;
}else if(!p.quote && c === ' '){
p.a.push('');
}else{
p.a[p.a.length-1] += c.replace(/\\(.)/,"$1");
}
return p;
}, {a: ['']}).a;
return(s1);
}
/*qSchema.formatter('escape', function (escape, value, param) {
var r = [];
if (escape) {
if(typeof value == 'string') {
r = phraseSplit(value);
} else if (Array.isArray(value)) {
for(v in value) {
r.push(v.phraseSplit(value));
}
}
}
var terms = "";
for(var term of r) {
terms = terms + ' "' + term + '" ';
}
return terms;
});*/
/* qSchema.formatter('nullify', function(escape, value, param){
console.log("NULLIFY CALLED!");
if (value === "null") {
return {$exists:false};
}
});
if(opts.facet.severity) {
qSchema.param('severity').option('nullify', true);
}*/
module.exports = function(facet) {
var queryDef = {
q: {
normalize: false,
type: String,
default: null,
//escape: true,
paths: ["$text"],
operator: "$search",
/*formatter: function (txt, v, p) {
return v.replace(/([A-Z]+-[0-9A-Za-z-]+)/g, "\"$1\"");
}*/
},
sort: {
default: 'ID'
},
limit: {
// ASF
default: 2000,
// END ASF
max: 22000
}
};
for (key in facet) {
var options = facet[key];
queryDef[key] = {
type: [String],
paths: [options.path]
}
if (options.type) {
queryDef[key].type = options.type;
}
if (options.hasOwnProperty('default')) {
queryDef[key].default = options.default;
}
if (options.queryOperator) {
queryDef[key].operator = options.queryOperator;
}
if(options.sortDefault) {
queryDef.sort.default = options.sortDefault;
}
}
return querymen.middleware(new querymen.Schema(queryDef));
}