从术语方面迁移到术语聚合

时间:2015-06-23 15:24:52

标签: elasticsearch

我必须迁移术语facet

{
  "facets" : {
    "facet_name" : {
      "terms" : {
        "field" : "location",
          "script" : "return doc['location'].value == \"UA\""
        }
      }
    }
}

到聚合术语

{
  "aggs" : {
    "agg_name" : {
      "terms" : {
        "field" : "location",
          "script" : "return doc['location'].value == \"UA\""
        }
      }
    }
}

Facet在弹性方面工作正常(我在1.1.2和1.5.2上测试过)

但聚合会引发异常 org.elasticsearch.script.groovy.GroovyScriptExecutionException:ArrayIndexOutOfBoundsException [-1]

根据问题描述https://github.com/elastic/elasticsearch/issues/11728出现此类行为,因为在找到显式“字段”时聚合使用“值”脚本。

对于facets脚本是传统的。

如何禁用此脚本的“值”性质并使其像facet一样工作?

提前致谢!

PS:我不能使用过滤(包含/排除),排除规则应该在脚本中声明,与facet相同。

1 个答案:

答案 0 :(得分:0)

我通过修改脚本并从agg中删除“field”找到了解决方法:

{
    "aggs" : {
        "agg_name" : {
            "terms" : {
                "script" : "if (_source.location == \"UA\") {return _source.location} else {return null}"
            }
        }
    }
}