3

在es5.5中,如何判断一个字段是否为数字?

if (is_numeric(ctx._source.some)) {
    ctx._source.some = ctx._source.some + 2
}
4

2 回答 2

2

instanceof运算符可能在这里有所帮助

if (ctx._source.some instanceof byte ||
    ctx._source.some instanceof short ||
    ctx._source.some instanceof int ||
    ctx._source.some instanceof long ||
    ctx._source.some instanceof float ||
    ctx._source.some instanceof double)
{
    ctx._source.some = ctx._source.some + 2
}
于 2019-04-03T17:12:19.010 回答
1

另一种方法是使用Debug.explain,请参阅https://www.elastic.co/guide/en/elasticsearch/painless/6.8/painless-debugging.html

这将中止 apainless_explain_error并且输出将告诉您涉及哪些类。有了这些信息(从各种 ElasticSearch 版本的各种索引中手动获取),您就可以实现 Painless with instanceof,如@oleg-grishko 的答案所示。

POST /hockey/player/1/_explain
{
  "query": {
    "script": {
       "script": "Debug.explain(doc.goals)"
    }
  }
}

{
   "error": {
      "type": "script_exception",
      "painless_class": "org.elasticsearch.index.fielddata.ScriptDocValues.Longs",
       ...
于 2020-06-08T09:25:32.370 回答