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

时间:2013-08-30 20:55:56

标签: elasticsearch

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

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

我收到的错误是:

PropertyAccessException[[Error: unresolvable property or identifier: org]

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

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

1 个答案:

答案 0 :(得分:4)

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

另一方面,我看到你的问题中有更多细节,我一直想知道你是否甚至可以避免使用脚本排序来达到你想要的效果。

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

即将推出的版本0.90.4还将包含随机种子排序,这可以帮助您进行排序的随机方面。请查看related issue了解更多信息。

将rescore查询与允许随机排序的功能得分查询结合起来会很酷。