弹性搜索,以符号开头的字段名称

时间:2014-12-12 19:42:07

标签: groovy elasticsearch

我正在使用elasticsearch 1.3.4和groovy。我想要做的是在弹性搜索查询中使用脚本:

{
  "size": 0,
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "@timestamp": {
              "gte": "2014-12-08T03:40:00.000Z",
              "lte": "2014-12-08T03:40:59.999Z"
            }
          }
        }
      ],
      "must_not": []
    }
  },
  "facets": {
    "myFacet": {
      "terms": {
        "script": "doc['@field1'].value + ':' + doc['@field2'].value"
      }
    }
  }
}

由于某种原因,字段名称以at符号开头。问题是groovy将at符号视为特殊字符(http://groovy.codehaus.org/Operators)。来自groovy的错误消息:

  

嵌套:GroovyScriptCompilationException [MultipleCompilationErrorsException [startup failed:\ nScript78.groovy:1:无法解析类字段,无法找到注释类\ n @

因此,可以使用" @"开始使用字段进行常规工作。登录?

1 个答案:

答案 0 :(得分:1)

unicode value替换“@”将阻止它被Groovy处理

e.g。替换

doc['@field1'].value

doc['\u0040field1'].value