在es5.5中,如何判断一个字段是否为数字?
if (is_numeric(ctx._source.some)) {
ctx._source.some = ctx._source.some + 2
}
在es5.5中,如何判断一个字段是否为数字?
if (is_numeric(ctx._source.some)) {
ctx._source.some = ctx._source.some + 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
}
另一种方法是使用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",
...