ElasticSearch查询时候过滤_source字段

进行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 map = new HashMap();Iterator iterator = _source.keySet().iterator();
		while(iterator.hasNext()){String key = (String) iterator.next();if(key.length()<10){map.put(key,_source.get(key))}};
		map"
    } 
  }  
}


很简单,直接在script里面写java代码就可以了。通过遍历_source把key小于10的放到map里面,循环结束后显示map。

(本来想直接操作_source的,但用remove方法行不通,应该是不允许对元数据进行操作吧)

你可能感兴趣的:(elasticsearch)