【问题标题】:ElasticSearch Get Time in Groovy ScriptElasticSearch 在 Groovy 脚本中获取时间
【发布时间】:2015-01-07 18:17:56
【问题描述】:

我的应用程序正在使用此脚本来提升索引中最近的项目:

(5 / ((3.16*pow(10,-11)) * abs(time() - doc[\'date\'].date.getMillis()) + 0.2)) + 1.0

它是用 MVEL 编写的,但是从 1.3 开始,Groovy 不推荐使用 MVEL。该脚本现在抛出此错误:

GroovyScriptExecutionException[MissingMethodException[No signature of method: Script4.time() is applicable for argument types: () values: []\nPossible solutions: find(), dump(), find(groovy.lang.Closure), use([Ljava.lang.Object;), is(java.lang.Object), with(groovy.lang.Closure)]]

这听起来像是在 Groovy 中获取毫秒时间戳的函数不同。我试过System.currentTimeMillis(),但它给出了另一个错误,说它不支持导入。

那么我怎样才能修复time() 函数以使用Groovy?

【问题讨论】:

  • 嗨 Jonah,如果您不介意,请告诉我上述脚本如何帮助提升最新项目..?谢谢你的帮助 。 (我只是按“更新日期”降序排序以获取最新项目。这是一个带有时间戳的日期。)..再次感谢
  • 不确定您到底需要什么信息,但如果您在下面查看我的回答,您可以看到整个使用上下文。
  • 感谢您的回复,很抱歉我错过了您的评论。在您的问题中,您提到了以下几行。很抱歉,我找不到使用此脚本来提高性能的原因。为什么我们不能直接按日期排序来获取最新的项目,为什么我们必须使用这个脚本? “我的应用程序正在使用这个脚本来提升索引中最近的项目:(5 / ((3.16*pow(10,-11)) * abs(time() - doc[\'date\'].date.getMillis ()) + 0.2)) + 1.0"
  • Your lines ""我的应用程序正在使用这个脚本来提升索引中最近的项目:(5 / ((3.16*pow(10,-11)) * abs(time() - doc [\'date\'].date.getMillis()) + 0.2)) + 1.0""
  • @Bujji 我使用这个脚本的原因是温和地提升结果的新近程度。如果我只是按日期排序,它们将不再按与搜索查询的相关性排序。

标签: groovy elasticsearch timestamp mvel


【解决方案1】:

正如您已经发现的那样,您需要用 Groovy 而不是 MVEL 重写您的脚本。您需要使用DateTime.now().getMillis() 而不是时间。以下是您如何使用它的示例:http://writequit.org/org/es/index.html#time-in-groovy-script

【讨论】:

  • 即使我已经解决了这个问题,我还是将你的问题标记为答案,因为它是对我提出的问题的最直接解决方案。谢谢!
【解决方案2】:

我没有找到如何在脚本中获取时间,但您似乎可以将变量添加到脚本中可用的查询中。这是生成的 JSON。

"function_score": {
    "query": /*...*/,
    "functions": [
        {
            "filter": {
                "exists": {
                    "field": "date"
                }
            },
            "script_score": {
                "params": {
                    "now": 1409001061000
                },
                "script": "(5 / ((3.16*pow(10,-11)) * abs(now - doc['date'].date.getMillis()) + 0.2)) + 1.0"
            }
        }
    ],
}

我的应用程序会生成时间戳(在本例中为 1409001061000)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多