使用以下script_fields脚本还有另一种方法:
curl 'http://localhost:9200/test-idx/_search?pretty=true' -d '{ "query" : { "match_all" : { } }, "script_fields": { "terms" : { "script": "doc[field].values", "params": { "field": "message" } } }}'重要的是要注意,尽管此脚本返回已被索引的实际术语,但它也会缓存所有字段值,并且在大索引上会占用大量内存。因此,在较大的索引上,使用以下MVEL脚本从存储的字段或源中检索字段值并快速重新解析它们可能更有用:
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;import java.io.StringReader;// Cache analyzer for further usecachedAnalyzer=(isdef cachedAnalyzer)?cachedAnalyzer:doc.mapperService().documentMapper(doc._type.value).mappers().indexAnalyzer();terms=[];// Get value from Fields Lookup//val=_fields[field].values;// Get value from Source Lookupval=_source[field];if(val != null) { tokenStream=cachedAnalyzer.tokenStream(field, new StringReader(val)); CharTermAttribute termAttribute = tokenStream.addAttribute(CharTermAttribute); while(tokenStream.incrementToken()) { terms.add(termAttribute.toString()) }; tokenStream.close(); } terms此MVEL脚本可以存储为
config/scripts/analyze.mvel以下查询,并与以下查询一起使用:
curl 'http://localhost:9200/test-idx/_search?pretty=true' -d '{ "query" : { "match_all" : { } }, "script_fields": { "terms" : { "script": "analyze", "params": { "field": "message" } } }}'


