11

以下排序脚本曾经在 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]

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

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

4

1 回答 1

4

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

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

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

即将到来的版本 0.90.4 还将包含随机种子排序,这将有助于您进行排序的随机方面。查看相关问题以了解更多信息。

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

于 2013-09-06T21:40:47.713 回答