基于elasticsearch Rest URL模板动态生成(索引按照日期切分)

例如,
日期: 2014-09-11至2014-09-12
Template: http://192.168.0.1:9200/{repeat:(prefix, dayslot, suffix)}/_search

调用方式:
var urlcomplie = new shyl.view.esreport.ux.EsUrlCompiler(url),
url = urlcomplie.getValue(options);//options = {dayslot: [20140911, 20140912]} 日期需要处理好

结果 url= http://192.168.0.1:9200/prefix20140911suffix,prefix20140912suffix, /_search


/**
* url 模板编译类, 基于ES RESTFul定制数据源时, 它的URL配置往往是需要支持动态生成的,
* 所以该类主要用来处理URL的模板部分例如:
* http://host:port/{指令名称:(参数值)}/{指令名称:(参数值)}。
* 基于这样的设计,你可以定义自己想要的格式。
*
* @author wang xiu fu
*/

Ext.define('shyl.view.esreport.ux.EsUrlCompiler', {
requires: [],
/**
* 匹配模板表达式
*/
re: /\{([\w]+)(?:\:)\(([\w,]+)?\)\}/g,

url: null,

complied: Ext.emptyFn,

commands: {
repeat: true
},

isUrlCompiler: true,

constructor: function(url, options) {
options = options || {};
Ext.apply(this, options);
this.complie(url);

},

complie: function(url) {
var me=this,
bodyReturn,
body;
function fn (m, command, params) {
if (!me.commands[command]) {
Ext.Error.raise('url模板中的"+command+"不存在');
}
params = params || '';
var params = params.split(','),
len = params.length,
prefix = '',
suffix = '',
array = '',
i;
switch(len) {
case 1:
array = "this['" + params[0] + "']";
break;
case 2:
prefix = "'" + params[0] + "',";
array = "this['" + params[1] + "']";
break;
case 3:
prefix = "'" + params[0] + "'";
array = "this['" + params[1] + "']";
suffix = ",'" + params[0] + "'";
break;
}
return "' + this." + command + "(" + prefix + array + suffix +") + '";
}
bodyReturn = "'" + url.replace(me.re, fn) + "'";
body = "this.complied = function() { return " + bodyReturn + "; }";
eval(body);
return me;
},

getValue: function(options) {
options = options || {};
if (Ext.isFunction(options)) {
options = options();
}
Ext.apply(this, options);
return this.complied();
},

//---------------------------------command-----------------------------------------------
/**
* 重复指令,该参数有个参数
*
*/
repeat: function(prefix, array, suffix) {
var me=this,
prefix = prefix || "",
suffix = suffix || "",
array = array || [],
i;
if (!array || !array.length || array.length === 0) {
throw new Error('url模板包含错误的参数');
}
for (i in array) {
array[i] = prefix + array[i] + suffix;
}
return array.join(',');
}
//其他其他指令可以在此扩展
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值