以下排序脚本过去在 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]
我看到一些帖子建议创建一个自定义分数查询来完成这项工作,所以提供一些额外的信息。我已经在使用自定义分数查询,并且这种排序是分数匹配时的次要排序,这可以(并且应该)定期发生。上面示例中的常数基于执行搜索的人,因此每个搜索的人都会得到随机但一致的排序,我们并不总是在顶部向所有人显示相同的结果。
我找不到任何关于为什么会发生这种情况以及如何在保留相同排序功能的同时修复它的信息。任何帮助或为我指明新方向将不胜感激。
最佳答案
我在邮件列表中回复了您的帖子,问题是由于 org.elasticsearch.common.Digest
已从 elasticsearch 中删除。我不认为你可以用一行来替换它,如果你熟悉 Java,可能更容易编写 Java native 脚本。
另一方面,我看到您在此处的问题中提供了更多详细信息,我一直在想您是否可以避免使用脚本排序来实现您想要的结果。
您的用例让我想到了最近添加的 rescore query ,它允许使用辅助查询对前 K 个结果进行重新评分。请务必考虑到重新评分是在每个分片上执行的。因此,如果您请求前 10 个文档,则重新评分将发生在每个分片的前 10 个文档上,这将影响在 reduce 阶段选择的前 10 个文档。听起来您更希望更改返回文档的顺序,而使用重新评分查询时,这些文档可能会因重新评分过程本身而改变。
即将到来的版本 0.90.4 也将包含随机种子排序,这应该可以帮助您处理随机排序。看看 related issue了解更多。
将重新评分查询与允许随机排序的函数评分查询结合起来会很酷。
关于elasticsearch - 升级后 Elasticsearch 排序脚本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18541354/