进行DSL查询过程有个需求,需要将_source数据当中key小于10的字段取出来,过滤掉大于等于10的。
所以就用了es的script,需要在elasticsearch.yml的配置里加入这几个:
script.engine.groovy.inline.aggs: true
script.engine.groovy.inline.update: false
script.engine.groovy.indexed.search: true
script.inline: true
script.indexed: true
之后就可以写script查询语句了,具体语句如下:
GET waf-2017.10.31/_search
{
"script_fields": {
"test1": {
"script": "Map<String,String> map = new HashMap<String,String>();Iterator iterator = _source.keySet().iterator();
while(iterator.hasNext()){String key = (String) iterator.next();if(key.length()<10){map.put(key,_source.get(key))}};
map"
}
}
}
(本来想直接操作_source的,但用remove方法行不通,应该是不允许对元数据进行操作吧)