文档字段表达式函数在表达式脚本中有效吗?

时间:2015-02-17 23:00:06

标签: elasticsearch

在elasticsearch(版本1.4.3)中,当通过lucene expression lang使用script_score时,在尝试任何表达式字段函数时总是得到QueryParsingException,例如:

  • doc['field_name'].distance(lat, lon),
  • doc['field_name'].distanceWithDefault(lat, lon, default)
  • doc['field_name'].geohashDistanceInKm(geohash)

请参阅文档所说的list of Expressions

值得注意的是,值表达式被接受(尽管我没有测试它们的值是否正确)。因此,接受提及doc['field_name'].value的脚本 - 至少是解析器。

鉴于Groovy的安全漏洞,许多托管的弹性搜索提供程序(如盆景)已经关闭了对Groovy语言功能的支持。我的想法是没有任何函数绑定到表达式lang。

示例:

"script_score" : {
    "lang" : "expression",
    "script": "exp(pow(doc['location'].geohashDistanceInKm(geohash), 2) / (pow(scale, 2) / ln(decay)))",
    "params": {
      "geohash" : "9q8yy",
      "scale" : "0.3",
      "decay" : "0.1"
    }
}

让我不高兴:

IllegalArgumentException[Unrecognized method call (doc['location'].geohashDistanceInKm).]

是的,location是geo_point类型:

"location": {
  "type": "geo_point"
},

希望确认这一点。现在我将编写客户端解决方法的代码。

0 个答案:

没有答案