弹出搜索聚合,脚本提供异常

时间:2015-07-02 08:28:32

标签: elasticsearch

查询失败[无法执行主查询]];嵌套:GroovyScriptExecutionException [ArrayIndexOutOfBoundsException [-1]];

我正在使用以下aggs查询

{
  "aggs": {
    "hscodes_eval": {
      "terms": {
        "field": "fscode"
        },
        "aggs": {
                "top_6_fscodes": {
                  "terms": {
                    "field": "fscode",
                     "script": "doc[\"fscode\"].value[0..6]"
                  }
                }
              }
      }
  }
}

我想获得与字段fscode的前6个字符匹配的文档数。 但我超越了异常。请帮助。

1 个答案:

答案 0 :(得分:0)

试试这个:

{
  "aggs": {
    "hscodes_eval": {
      "terms": {
        "field": "fscode"
      },
      "aggs": {
        "top_6_fscodes": {
          "terms": {
            "script": "fieldValue=doc['fscode'].value;if(fieldValue.length()>=7) fieldValue[0..6] else ''"
          }
        }
      }
    }
  }
}

但我不会这样做,这意味着使用script。脚本通常很慢,如果你有很多文档,它可以很快加起来。

Haven没有考虑过这个问题,但我的直觉是说我会尝试在索引时间,输入sub-field of fscode初始的前6个字符{ {1}},也许使用truncate filter。然后,在搜索时,我会使用fscode聚合而不是terms,而是在已定义的子字段上。