Elasticsearch脚本查询无痛指数函数

时间:2018-04-26 19:51:09

标签: elasticsearch elasticsearch-painless

使用Elasticsearch和无痛是否有办法实现指数函数?我似乎找不到任何东西。我有类似的东西。

bdy = {
    "from" : 0,
    "size" : 10,
    "query": {
        "function_score": {
            "query": {
                "bool": {
                    "must": must_terms
                }
            },
            "script_score": {
                "script": {
                "lang": "expression",
                "source": "doc['release_year'].value"
              }
            }
        }
    }
}

我想在源字段中添加一些更复杂的数学,就像这样。

"source": "Math.exponential(1/doc['release_year'].value)"

这可能吗?或者是否有另一种脚本语言可以在elasticsearch内完成?

更新

实际上看起来我可以使用。

"lang": "expression"
"source": "_score/10 + 1/(1+ exp(-(doc['release_year'].value*a)))"

http://lucene.apache.org/core/6_0_0/expressions/index.html?org/apache/lucene/expressions/js/package-summary.html

如果有人有其他选择会很酷。

1 个答案:

答案 0 :(得分:2)

您可以使用与Math.exp()

相同的方式在Painless中执行此操作
"source": "_score/10 + 1/(1+ Math.exp(-(doc['release_year'].value*a)))"

请在此处查看完整的无痛API:https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-api-reference.html