使用以下查询:
{
"query": {
"filtered": {
"filter": [],
"query": {
"bool": {
"must": [
{
"query_string": {
"fields": [
"title"
],
"query": "test"
}
}
]
}
}
}
},
"aggs": {
"my_field": {
"terms": {
"field": "my_field.name.raw",
"script": "doc['title'].value"
}
}
}
}
我收到以下错误:
QueryPhaseExecutionException [[index_name] [2]:query [title:test],from [0],size [10]:Query Failed [无法执行主查询]];嵌套:PropertyAccessException [[错误:doc ['title']。value:null] [近:{... doc ['title']。value ....}] ^ [Line:1,Column:1]] ;嵌套:InvocationTargetException;嵌套:ArrayIndexOutOfBoundsException;
我还尝试使用_source.title
,doc.get('title').value
以及doc['field']
语法的其他组合 - 没有一个适合我。在聚合中使用script
是否有特殊的细微差别?我错过了一些明显的东西吗?
ES 1.1.1和1.2.0都失败了。
答案 0 :(得分:3)
看起来我可以回答我自己的问题。来自the docs:
如果为聚合配置了字段和脚本设置,则该脚本将被视为值脚本。虽然在文档级别上评估普通脚本(即脚本可以访问与文档关联的所有数据),但是在值级别上评估值脚本。在此模式下,从配置的字段中提取值,脚本用于应用"转换"超过这些值。
我指的是"字段" param,意思是我正在处理一个值脚本。
我也是asked this question on the ES Google Group,并在那里提供了相同的反馈。