升级后弹性搜索排序脚本不起作用

Nic*_*sen 11 elasticsearch

以下排序脚本曾用于0.2但现在在0.9中失败:

{
  "_script": {
    "script": "org.elasticsearch.common.Digest.md5Hex(doc['myId'].value + 12345)",
    "type": "string",
    "order": "asc"
  }
}
Run Code Online (Sandbox Code Playgroud)

我收到的错误是:

PropertyAccessException[[Error: unresolvable property or identifier: org]
Run Code Online (Sandbox Code Playgroud)

我看过帖子建议创建一个自定义分数查询来完成这项工作,所以一些额外的信息.我已经在使用自定义分数查询,这种分数是分数匹配的次要排序,可以(并且应该)定期发生.上面示例中的常数基于执行搜索的人员,因此每个搜索的人都会获得随机但一致的排序,并且我们并不总是在每个人的顶部显示相同的结果.

我找不到任何关于为什么会发生这种情况的信息,以及如何在保留相同的排序功能的同时修复它.任何帮助或指向我的新方向将不胜感激.

jav*_*nna 4

我在邮件列表中回复了您的帖子,问题是由于 已从org.elasticsearch.common.Digestelasticsearch 中删除。我不认为你可以用一行来替换它,如果你熟悉 Java,编写 Java 本机脚本可能会更容易。

另一方面,我看到您的问题中有更多详细信息,我一直想知道您是否可以避免使用脚本排序来实现您想要的目的。

你的用例让我想到了最近添加的rescore query,它允许使用辅助查询对前 K 个结果进行重新评分。请考虑到重新评分是在每个分片上执行的。因此,如果您请求前 10 个文档,则重新评分将发生在每个分片的前 10 个文档上,这将影响在缩减阶段选择的前 10 个文档。听起来您更希望更改返回的文档的顺序,而使用重新评分查询时,这些文档可能会由于重新评分过程本身而发生变化。

即将推出的版本 0.90.4 还将包含随机种子排序,这应该可以帮助您实现排序的随机方面。查看相关问题以了解更多信息。

将重新评分查询与允许随机排序的函数评分查询结合起来会很酷。