无法访问ElasticSearch聚合脚本中的doc ['field']。value

时间:2014-05-22 19:57:00

标签: elasticsearch

使用以下查询:

{
  "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.titledoc.get('title').value以及doc['field']语法的其他组合 - 没有一个适合我。在聚合中使用script是否有特殊的细微差别?我错过了一些明显的东西吗?

ES 1.1.1和1.2.0都失败了。

1 个答案:

答案 0 :(得分:3)

看起来我可以回答我自己的问题。来自the docs

  

如果为聚合配置了字段和脚本设置,则该脚本将被视为值脚本。虽然在文档级别上评估普通脚本(即脚本可以访问与文档关联的所有数据),但是在值级别上评估值脚本。在此模式下,从配置的字段中提取值,脚本用于应用"转换"超过这些值。

我指的是"字段" param,意思是我正在处理一个值脚本。

我也是asked this question on the ES Google Group,并在那里提供了相同的反馈。